I want to use GAWizard to select an optimal production sequence for a source according to one or several optimization parameters. The production sequence can vary in quantity. For example, the production sequence can contain 30, 60, 90, 120 etc. MU's ( = rows in the table which the source produces according to).
The question is, what is a good configuration in these cases? If the production sequence contains 30 MU's, what should the number of generations be? Size of generation? I think observations per individual can be set to 20-30, regardless of the production sequence.
Apart fromt he settings I would recommend to use initial solutions, which you create using some basic rules. A typical rule would be to cluster products with the same set-up requirements, or simply sort the products by their due date. Such initial solutions give the GA a headstart, so that it does not waste time on total nonsense solutions. As such, the GA does not generate solutions from scratch, but acts as an improvement engine of several initial solutions that are quite good.
Other than that it is difficult to give general recommendations regarding the settings. I would approach it pragmatically and see if you get improved results (solution quality) by changing the settings.
Determining the number of observations is a different issue, related to the run-length of the simulation. If you have a model without stochastic behavior, 1 observation is enough.
The problem is that I don't have any solutions for the sequence at this point. I will try to explain the situation and my "solution" for it.
I have a production sequence with products for 90 days production (49 products). I want to find a sequence so that the total production time is less or equal to 90 days and that no products are late. Each product have an attribute, which is a date and indicates it's due date. If the product goes into the drain later that the due date I set an variabel to true which indicates that the sequence is "illegal" since something have been late. I have set GA to optimise a optimization variabel that is equal to the simtime. BUT, if the sequence is illegal (something is late) I add 1000 days to the optimization variabel. By doing this, I hope GA will find a sequence where nothing is late and the total production time is still less than 90 days.
But GA have not found a sequence that works. I have therefore set GA's problem definition to not only contain the production sequence, but also so it can change the number of workers, pallets in the production etc. In GA's fitness calculation it is optimizing (minimizing) the said optimization parameter, the number of workers, the number of pallets etc. So GA is, for example, both trying to increase the number of workers so simtime gets smaller AND keep it to a minimum. But so far I am still unsuccessful.
Have I done anything wrong, or do you have any tips for how to do this? I just run GA with 15 generations with 100 in each generation and 5 observations. It could still not find a sequence that works.
I think it is difficult to combine these two performance metrics in a single variable. Personally, I would drop the 90 days goal, since you already control it by setting the due dates.
And I would also change the way you penaltize due dates. For each order I would calculate the square of the time it is past due and multiply it by some constant. The sum of these values becomes the end result of a solution. As a result, on time orders get no penalty and excessive lateness is heavily punished.
If there is no stochastic behavior in the model, just stick to 1 observation.
Smart to only focus on the due dates, I didn't think to simply focus on minimizing that! I made a test run yesterday and got some good results by doing so.
I tried your way of calculating the penalty, but it didn't quite work. For some reason GA became very slow (would take several hours to finish). So now I am calculating fitness simply by adding the time all components was late.
The formula I used was TotalLateness := TotalLateness + LatenessEachComponent*LatenessEachComponent*100
Now I use TotalLateness := TotalLateness + LatenessEachComponent
I see. I ran a test run with GenNumber = 100 and Gensize = 30, took approximately 1 hour to finish. It continued to improve by almost every other generation until GenNumber 92.
I've started my experiments that will be used in a project, using GenNumber = 100 and Gensize = 50 and Observations = 6. I feel this should be enough for this model.