AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortieren und kombinieren von Längen

Ein Thema von andone68 · begonnen am 2. Jun 2011 · letzter Beitrag vom 13. Jun 2011
 
Jens01
Online

Registriert seit: 14. Apr 2009
673 Beiträge
 
#10

AW: Sortieren und kombinieren von Längen

  Alt 6. Jun 2011, 12:47
Soo.. ich habe das Programmteil einmal durchgearbeitet, aber noch nicht zum Laufen auf den neuen System (Windows, Delphi) bekommen.
Den Kern der Optimierung habe ich mir aber jetzt herausgeabeitet :
Delphi-Quellcode:
Kombi: array[0..100] of Integer;
Liste: TObjectlist mit Nr und Länge der Stücken; // Liste muß von lang -> kurz sortiert sein!!!!   
                  
function TOptimierung.OkayCheck: Boolean;
var
  a: Double;
  i: Integer;
begin
  Result := False;

  if (Rest < 0.005) and (Rest >= 0) then
    Result := True
  else if (Durchlaufe > Parameter.Durchlaufe) and (Rest >= 0) then
    Result := True
  else
  begin
    a := 0;
    i := 0;
    while Kombi[i] > -1 do
    begin
      a := a + Liste[Kombi[i]].lange + Parameter.Verschnitt;
      inc(i);
    end;
    if ((a / VorratListe[x].lange) > Parameter.Grad) then
      Result := True
  end;
end;

procedure TOptimierung.Schleife(l: Double; int, VorratsLaenge: Double);
var
  i: Integer;
begin
  Inc(Schleifentiefe); // Schleifentiefe ist die Tiefe der Schleife

  for i := int to Liste.StueckCount - 1 do
  begin
    Inc(Durchlaufe);
    Rest := l - Liste[i].lange - Verschnitt;
    Kombi[Schleifentiefe] := Liste[i].Nr;
                                             // schreib die Nummer des Holzstueckes in Kombi
                                             // prueft ob derzeitige Kombination besser ist als
                                             // die letzte beste Kombination und speichert sie
                                             // gegebenenfalls in der KombiS
    if Rest < 0 then
      Continue;
    if OkayCheck then // prueft ob Optimierung ausreichend ist - Abbruchkriterium
      Exit;
   
    Schleife(rest, i + 1, VorratsLaenge); // springt in die naechste Schleifenebene
  end;

  Kombi[Schleifentiefe] := -1; {löscht das letzte Holzstück aus der Kombi-Kombination}
  Dec(Schleifentiefe); // reduziert Schleifentiefe, weil jetzt auf eine untere Schleifenebene
                              // zurueckgesprungen wird
end;
"Liste" ist eine Liste mit den Teilstücken. Wichtig ist, dass sie vorab von lang nach kurz sortiert wird!

Bitte um Rückkopplung!

Geändert von Jens01 ( 6. Jun 2011 um 14:48 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz