You probably won’t understand SMOSLT as an app until you first read why SMOSLT is run within an IDE. It just won’t make sense.
This is the main SMOSLT project, where all the important action happens.
These actions include
- running the other modules
- Taking the assumptions you give it, and coming up with a list of costs based on those assumptions.
SMOSTLT sequence of events within modules:
Orchestrated primarily from app module, but also manually from within IDE, given no UI
- before firing, user has already
- created a compliant PL file
- created list of options and other assumptions in assume module
- created SideEffect code that drives each option.
- imports PL file
- imports assumptions from assume module
- sends each of these to the optaplanner options module
- schedule binary
- optaplanner options module then folows this sequence
- toggles one option on or off at a time
- sends that combination of options to stacker
- which can be on separate threads or machines if required
- which writes each score and binary to analytics module
- which also then returns score back to options module
- runs to some reasonable termination whatever that means
- brute force if options list small enough
- more elaborate search process if options list too big
- user then reviews run in analytics module
Java classes consumed by other modules. Kept separate just for purposes of clarity.
Assumptions are required for SMOSLT to do anything meaningful.
This is YOUR area, because you are responsible for all assumptions, even though you might start out with 100% default or partially customized assumptions provided by others. This is like what the cop tells you: “Ignorance is no excuse” the results you get will be no more satisfactory or correct than the assumptions you used to initiate a specific run.
Areas that assumptions cover:
- Unit costs for include.
- Beliefs about if-then consequences – if I have a java task with no testing, then I will get 30% more unanticipated work fixing bugs. That’s a belief. No one can know what really happens until it does.
- Story templates. If every task is a story, per agile approaches, then the sum total of all tasks is a narrative arc that makes up a story template. No story template is truly representative of what really happens, but to anticipate costs you have to start somewhere.
- Actual ProjectLibre files. Ease of use demands that you start with a ProjectLibre template, compliant to SMOSLT specifications.
Stacker, or ScheduleStacker, creates a real schedule from a ProjectLibre specification template. Stacker knows nothing about SMOSLT or all the fancy stuff that SMOSLT does, it just stacks up tasks and allocates resources like it is told to do.
Stacker is designed to be as simple and fast as possible, because it might get called to re-stack a schedule thousands of different times in a single session.
Stacker could theoretically be used by anyone, without any SMOSLT usage. It is not anticipated that anyone would wish to do this, but it is welcomed if desired.
SMOSLT does it’s active work in SMOSLT code, and does not interact directly with ProjectLibre APIs. A ProjectLibre schedule is entirely converted into SMOSLT code, and then when done entirely converted back into ProjectLibre file. Ne’r does the twain meet. This conversion happens in this module.
Only the brave should ever crack open this module. ProjectLibre APIs can be quite challenging to the uninitiated, and a giant black hole of time. As of Oct 2014, it is being rewritten ground up anyway.
Someday SMOSLT may be runnable from a real GUI, like you would expect from any decent application.
That day has not yet come. So until then, it is run from a command line. This command line , or CLI code is maintained here.
See separate document