Hallo,ich habe folgendes Problem:
Aufgabenstellung:
Der Fertigungsprozess in einer Lackieranlage soll simuliert werden. Es stehen 20 unterschiedliche Farben zur Auswahl.Fahrzeuge werden zunächst per Zufall in einen der 8 Sortierer zwischengelagert (FiFo-Prinzip). Dann geht immer nur ein Auto auf Lackieranlage und wird in einer neuen Farbe Lackiert. Hierzu gibt es eine Tabelle mit entsprechenden Rüstzeiten bei Farbwechsel. Also gibt es hier ein Einlagerungs-und Aulagerungsproblem für zufällige Verteilung. Dann soll in einer 2.Strategie alles so optimiert werden, dass mögl. geringe Rüstzeiten bzw. min Zykluszeit anfällt.
Was ich bis jetzt habe:
im 1. teil muss ich noch hinkriegen, dass er nach
fogendem schema die farben umrüstet: auto 1 hat farbe rot. erstes auto hat keine umrüstzeit, da farbe vorher 0 farbe nachher. dann kommt auto 2 mit farbe grün. also muss ich von rot nach grün umrüsten. dann kommt auto 3 mit gelb, also muss ich von grün nach gelb umrüsten usw.;
mein programm macht das aber nicht, sondern rüstet entweder nur von gelb nach gelb, dann blau
nach blau, dann grün nach grün oder ganz ohne prinzip. hab aber auch schon gesehen, dass die lösung meines kollegen hier leider auch nicht passt :-(
im 2. Teil geht es dann ums optimieren. ich möchte zunächst immer in den sorter umlagern, der frei ist (=1.überprüfung) und wenn keiner frei ist in den, der die geringste rüstzeit zum vorgänger aufweist und ist im idealfall null, wenn gleiche farbe (2.Überprüfung). So, dann soll die lackieranlage sich immer das autos aus dem einzelnen sorter nehmen, wo möglichst minimale rüstzeit zum vorgänger auftritt.
Kann mir bitte, bitte, bitte jemand dabei helfen?
Hier mein Algorithmus:
Quelle_aus:
is
do
auto:=auto+1;
@.farbe:=(floor(z_gleich(vSimLauf,1,21)));
if auto=1 then
farbe_von:=@.farbe;
farbe_nach:=farbe_von;
ruestzeit:=Tabelle_Ruestzeit[farbe_nach,farbe_von];
@.umlagern(Lackieranlage);
else
/*if Strategie=1 then*/
@.LS:=Str_to_obj("LS_"+to_str(floor(z_gleich(vSimLauf+20,1,9)))
/*else sortiere auto in sorter mit geringster rüstzeit/minimale rüstzeit zum vorgänger*/
@.umlagern(@.LS);
end;
Tabelle_Auswertung[1,@.id]:=@.id;
Tabelle_Auswertung[2,@.id]:=Ereignisverwalter.zeit;
/*if auto=180 then
Tabelle_Zykluszeit[1,vSimLauf]:=Ereignisverwalter.zeit;
end;/* --an der stelle quatsch, außerdem wird immer die 12h eingetragen und danach auf null gestzt??*/
end;
Liniensorter_aus:
is
do
farbe_von:=@.farbe;
ruestzeit:=Tabelle_Ruestzeit[farbe_nach,farbe_von];
/*ruestzeit_ges=ruestzeit_ges + ruestzeit;*/
while
Str_to_obj("LS_"+to_str(floor(z_gleich(vSimLauf+40,1,9)))).belegt=true loop
@.umlagern(Lackieranlage);
return;
Tabelle_Auswertung[5,@.id]:=Ereignisverwalter.zeit;
end;
end;
Lackieranlage_aus:
is
do
farbe_nach:=@.farbe;
farbe_von:=farbe_nach;
@.umlagern(Senke);
Tabelle_Auswertung[3,@.id]:=Ereignisverwalter.zeit
Tabelle_Auswertung[4,@.id]:=Tabelle_Auswertung[3,@.id]-Tabelle_Auswertung[2,@.id];
end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP