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
Antwort Antwort
andone68

Registriert seit: 22. Apr 2011
7 Beiträge
 
Delphi 6 Personal
 
#1

AW: Sortieren und kombinieren von Längen

  Alt 4. Jun 2011, 14:32
Hallo zusammen,

hab jetzt mal das Cutting Stock Programm getestet (Link von Uwe). Funktioniert definitiv nicht wenn die Längen nur in Stückzahl 1 gebraucht werden. In meinem Beispiel komme ich wenn ich alle Teillängen addiere auf 1424m. Das Programm errechnet dann (wenn ich Stablänge 300m eingebe) 20 Stäbe. Das wären dann 6000m - also definitiv zu viel. Offensichtlich werden die Stückzahlen ignoriert. Bei größeren Stückzahlen funktionierts dann irgenwie doch wieder was aber in meinem Fall nicht vorkommt.

@Jens: wenn du nach 20! Jahren wirklich noch was zusammenkriegst wäre ich dir dankbar.
@Uwe: Wie ich gesehen habe ist ja für dich englisch kein Problem. Vielleicht kannst du dem Autor ja mal eine Info schicken.

Gruß
andone68
  Mit Zitat antworten Zitat
Jens01

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

AW: Sortieren und kombinieren von Längen

  Alt 4. Jun 2011, 14:50
Also andone68,

gerade habe ich noch mal gesucht und tatsächlich die Diskette gefunden. Das Problem liegt in dem Wort Diskette 3,5". Die Diskette paßt nämlich nicht in das CD-Laufwerk.

Ich versuche, meinen Uraltrechner noch mal zu starten und die Daten von Diskette auf USB zu bekommen. Du mußt etwas geduld haben.
Versprechen kann ich aber nichts, da alles sehr alt.

Gruss Jens
  Mit Zitat antworten Zitat
andone68

Registriert seit: 22. Apr 2011
7 Beiträge
 
Delphi 6 Personal
 
#3

AW: Sortieren und kombinieren von Längen

  Alt 4. Jun 2011, 15:23
Hallo Jens,

super
Also ich hab noch nen Rechner mit Disketten-LW. Könntest mir ja die Diskette rübermailen. OK - da muss das Beamen wohl doch noch erfunden werden. Spass beiseite, erstmal danke für deine Mühen.

Gruß
andone68
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

AW: Sortieren und kombinieren von Längen

  Alt 4. Jun 2011, 15:49
Also das Problem schaut schonmal nicht so ganz einfach aus. (Ich vermute, es ist NP-komplex)

In Wikipedia habe ich was unter Untermengensumme gefunden, das könnte deinem Problem sehr nahe kommen. Dort wird auch ein Algorithmus vorgestellt ( http://de.wikipedia.org/wiki/Branch-and-Bound ) der eine Näherungslösung findet.
http://de.wikipedia.org/wiki/Zuschnittsproblem könnte auch noch helfen

P.S.: Ich glaube nicht, dass Disketten 20 Jahre durchhalten, aber ich lasse mich überraschen

Geändert von jfheins ( 4. Jun 2011 um 15:53 Uhr)
  Mit Zitat antworten Zitat
Jens01

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

AW: Sortieren und kombinieren von Längen

  Alt 4. Jun 2011, 15:57
Zitat:
P.S.: Ich glaube nicht, dass Disketten 20 Jahre durchhalten, aber ich lasse mich überraschen
Doch! Ich habe aber etwas übertrieben, das Dateidatum ist von 1996/97.

Brauche aber noch etwas, weil so kann ich das nicht veröffentlichen
  Mit Zitat antworten Zitat
Jens01

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

AW: Sortieren und kombinieren von Längen

  Alt 6. Jun 2011, 11: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 13:48 Uhr)
  Mit Zitat antworten Zitat
andone68

Registriert seit: 22. Apr 2011
7 Beiträge
 
Delphi 6 Personal
 
#7

AW: Sortieren und kombinieren von Längen

  Alt 9. Jun 2011, 06:30
@jfheins:
Danke für den Tipp. Tatsächlich ist es das Untermengen-Problem. Wäre nie darauf gekommen dass das ein berümtes Problem der Informatik ist. Leider gibt es im i-net sehr wenig Infos darüber.
Bisherige interessante Links(abgesehen von deinen) sind:
http://www.clausbrod.de/cgi-bin/view...MacroSubsetSum
http://contest.spieleprogrammierer.de/06/

@Jens
Im i-net googeln ist eins, aber Nägel mit Köpfen machen ist was anderes.
Habe bisher leider noch nix (mit Delphi) machen können ausser deinen Code zu überfliegen. Verstanden hab ich den Schleifenaufbau noch nicht ganz aber das kommt bestimmt wenn ich am Wochenende mal wieder Zeit fürs programmieren habe. Wie die Objekte aussehen sollen ist mir auch noch schleierhaft, das kommt aber nur daher weil ich mir nie selber welche definiere. Vielleicht hast du da noch einen Tipp. Dann könnte ich schneller ein Testprogramm schreiben und dir ne Rückmeldung geben.

Gruß
andone68
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:04 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-2025 by Thomas Breitkreuz