Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Groovy-fying the Simulation Supercomputer (and making it parallelizable)! #17

Closed
AncientShotgun opened this issue Mar 4, 2024 · 8 comments
Labels
enhancement New feature or request

Comments

@AncientShotgun
Copy link

Nomi CEu Version

1.7-alpha-2a

Related Problem

I saw that the Simulation Supercomputer Multiblock (internally known as 'dml_sim_chamber') was still defined using MultiblockTweaker in this pack version.

Your Solution

I decided to rewrite the class and the recipe registration in Groovy instead. I also elected to code it as a GCYM multiblock so its operation can be easily and natively parallelized with GCYM's own Parallelization Hatches; no need to fiddle around with the Workable or coil tiers. I didn't want to clone this entire repository and then pull it onto my local system; this wasn't a large enough job for that.

How Will Your Solution Work

Enclosed here is a .zip archive containing two .groovy files: The class file for the Simulation Supercomputer controller; and the recipe registration functions. They are quite prototypical and will require some work to complete and implement, but I hope your team can make something out of them.
dml_sim_chamber_class_recipes.zip

Alternatives You've Considered

No response

Additional Information

I also engineered a formula statement to computationally calculate the percentage chance of receiving a pristine matter from any tier of DME data model; this formula can be found, commented-out, in the dml_sim_chamber_recipes.groovy file in the .zip archive I provided.

@AncientShotgun AncientShotgun added the enhancement New feature or request label Mar 4, 2024
@IntegerLimit
Copy link
Member

Unfortunately, we do not use groovy multiblocks, we use Nomi Labs instead. Its already implemented there, but it is not parallizable; although that would be pretty simple (as I learned from my endevaours in the greenhouse).

I am interested in your pristine matter thing. Will look at this later.

@IntegerLimit
Copy link
Member

Moving to Nomi-Labs.

@IntegerLimit IntegerLimit transferred this issue from Nomi-CEu/Nomi-CEu Mar 5, 2024
@AncientShotgun
Copy link
Author

Keep in mind the formula assumes that the lowest tier of DME data model available is 'faulty' and this tier has a 0% chance to produce pristine matter. If it is not, notify me by commenting on this issue and I will provide an updated formula.

Does your team intend to use Groovy for recipe definition? If so, my next project is to code a Groovy snippet to scrape the DME config JSONs and extract model metadata directly from the configs for use in recipe definition.

@IntegerLimit
Copy link
Member

Recipes, yes will be in Groovy.

@AncientShotgun
Copy link
Author

AncientShotgun commented Mar 5, 2024

Have you already solved the "increment the data model by one kill on simulation completion" problem for the Simulation Supercomputer? I have a solution if you're interested, but it might be one you already tried/found. I'm also not sure how deterministic/thread-safe it is. I'll expound upon it in a new Github issue ticket if you want to hear it.

You'll also want to make sure that only one data model exists in the input inventory at the start of each recipe process, so the multiblock doesn't perform non-deterministic processing behaviour. Programmable circuit or custom RecipeLogic, perhaps?

@IntegerLimit
Copy link
Member

Have you already solved the "increment the data model by one kill on simulation completion" problem for the Simulation Supercomputer? I have a solution if you're interested, but it might be one you already tried/found. I'm also not sure how deterministic/thread-safe it is. I'll expound upon it in a new Github issue ticket if you want to hear it.

You'll also want to make sure that only one data model exists in the input inventory at the start of each recipe process, so the multiblock doesn't perform non-deterministic processing behaviour. Programmable circuit or custom RecipeLogic, perhaps?

I have not. I am interested in your solution.

@AncientShotgun
Copy link
Author

The solution writeup is now in the 'issues' list for this mod's Github repository, prepended with [Enhancement]. Warning, it's quite long and thorough, but I have a tl;dr at the start. I also found a couple of additional problems that would be faced if your team wanted to make the Simulation Supercomputer perform exactly like the DME Simulation Chamber singleblock.

@IntegerLimit
Copy link
Member

Implemented in bc138df.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants