Werter Kollege,
ich habe auch schon mal nach solch einer Lösung gesucht. Aber mehr aus Interesse.
In meiner Studienzeit habe ich mal eine 1-dimensionale Optimierung programmiert, um KVH-Stangen zu optimieren.
Das 2-dimensionale Problem ist etwas schwieriger. Es gibt aber einige Anbieter im Netz, die für dies Problem Programmkomponenten anbieten.
Gruss Jens
Das ist ein Beispiel
Hallo Jens, ich hab' so ein Programm auch bereits, das teilt allerdings die Mattenpositionen in
gewisse Typen ein und errechnet so den verbleiben Rest.
Delphi-Quellcode:
procedure TForm1.BuildCurrentResult(CurrentTyp: integer);
var
Rest: integer;
Item: TMattenResultItem;
begin
FCurrent.SortBySubtyp; // Vorsortierung
FCurrentResult.Clear;
while FCurrent.Count > 0 do
begin
Rest:= 1; // Ganze Matte Platz am Anfang
Item:= ClearMattenResultItem;
Item.Typ:= CurrentTyp;
Item.GVerschnitt:= FCurrent.First.GG;
while Rest <> 0 do // kommt in eine Matte
begin
SetCurrentItem(Rest); // Größte Position auf Index Null tauschen
if GetRest(Rest, FCurrent.First.Subtyp) then // **********
begin
Inc(Item.SubtypCount);
Item.Subtyp[Item.SubtypCount-1]:= FCurrent.First.Subtyp;
Item.Pos[Item.SubtypCount-1]:= FCurrent.First.Pos;
Item.GVerschnitt:= Item.GVerschnitt-FCurrent.First.G;
FCurrent.DelFirst;
if FCurrent.Count = 0 then Rest:= 0; // Break, alle Positionen abgearbeitet
end
else
Rest:= 0; // Break, diese Postion dann in eine neue Matte
end;
FCurrentResult.AddItem(Item);
end;
end;
Nun wollte ich das ganze etwas allgemeiner halten,
sozusagen für alle möglichen Abmessungen,
also eine statt einer
function GetRest(Rest, FCurrent.First.Subtyp)
sowas:
GetRest(Rest, FCurrent.First.Width, FCurrent.First.Height).