Autor |
Beitrag |
JDKDelphi
      
Beiträge: 115
Erhaltene Danke: 22
WIN2000, XP, WIN 7 , UNIX, LINUX
Assembler für (Z8x, 68xxx,R6000,Intel), DELPHI 6 Enterprise, MAGIC eDeveloper V9+V10, C++, C#,VB, .NET, zertifizierter iBOLT-Programmierer
|
Verfasst: Sa 01.08.09 11:27
Hallo Delphi-Programmer,
ich habe ein kleines Problem, wo es vielleicht eine schnelle Lösung gibt.
In der Betonfertigteilbranche wird Mattenstahl benötigt. Um diese Matten abzurechnen, müssen immer ganze Matten aus einer Anzahl
von Einzelmatten verschiedener Größe berechnet werden, ein sogenannte Mattenoptimierung.
Es gibt Matten mit verschiedenen Materialnummern, die aus einer Datenbank ausgelesen werden. Zudem sind die Maße der
Standardmatten definiert, z.B. 6m *2.3m
Eine Flächenoptimierung scheidet aus, da die einzelteile stellenweise nicht gedreht werden dürfen (R-Matten)
Somit muss ich ermitteln, ob eine Teilmatte noch in eine Standardgröße reinpasst.
Ich dachte da an ein Objekt, das zuerst über ein dyn. 2-dim-Array ähnlich eines Schachbrettes Boolsche Werte speichert.
Durch angabe von Länge und Breite der neuen Teilmatte wird ermittelt, ob der Teilbereich noch passt, ansonsten wird ein neues Objekt in einer Liste angelegt.
Ob gedreht werden darf, entscheidet eine Property.
Hinterher werden die Anzahl der Objekte ausgelesen und als ganze Matten wieder in die Datenbank geschrieben.
Hab Ihr eine bessere bzw. einfachere Lösung anzubieten.
Zum Lohn würde ich das fertige Objekt als OpenSource posten, damit auch andere das verwenden können.
Danke im Vorraus an alle Programmierer
Gruss
JDKDelphi
PS: Vielleicht kann man mir das auch per eMail schicken. Moderiert von AXMD: Topic aus Off Topic verschoben am So 02.08.2009 um 13:18
_________________ Wo andere aufhören, fange ich erst an..
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 01.08.09 11:39
JDKDelphi hat folgendes geschrieben : | PS: Vielleicht kann man mir das auch per eMail schicken. |
Suchst Du eine fertige Lösung oder suchst Du Ansätze / Ideen zu Algorithmen, die Du dann selber zu einem Quelltext entwickelst?
Auf jeden Fall gilt: Wenn Du im Forum fragst, bekommst Du im Forum auch Deine Antworten. Davon lebt das Forum, alles andere ist nicht erwünscht.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
JDKDelphi 
      
Beiträge: 115
Erhaltene Danke: 22
WIN2000, XP, WIN 7 , UNIX, LINUX
Assembler für (Z8x, 68xxx,R6000,Intel), DELPHI 6 Enterprise, MAGIC eDeveloper V9+V10, C++, C#,VB, .NET, zertifizierter iBOLT-Programmierer
|
Verfasst: Sa 01.08.09 11:43
Habe bereits eine Komponente, die jedoch nicht so ganz funktioniert. Ziemlich kompliziert.
Für eventuelle neue Ideen oder Ansätze wäre ich dankbar
Gruss
JDKDelphi
_________________ Wo andere aufhören, fange ich erst an..
|
|
Thorsten83
      
Beiträge: 191
Erhaltene Danke: 1
|
Verfasst: So 02.08.09 18:30
Dann häng die doch mal an
Geht es dir nur darum, das irgendwie hin zu bekommen, oder möchtest du den Versatz minimieren?
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Mo 03.08.09 10:17
Hallo,
Du musst also die rechteckige Fläche einer Matte möglichst vollständig mit rechteckigen Zuschnitten belegen.
Beim "Rucksack Problem" haben die Dingen ausser einem Gewicht ( Fläche) auch einen Wert, sodass man optimieren kann ( pareto optimal ). Hier ist der Wert aber immer konstant.
Du suchst also: de.wikipedia.org/wik...erschnittoptimierung ( die empfehlen genetische algorithmen)
www.bestopt.de/ die können das schon
Als eigenen Ansatz würde ich versuchen, kleinere gleiche Mattenstücke soweit zusammen zu packen, das sie in möglichst grosses Rechteck innerhalb einer Standardmatte ausnützen.
Um eine Matte zu befüllen, kann man sich ja das wie bei Tetris vorstellen, wobei man dafür sorgt, dass das fallende Mattenstück möglichst tief oder rechts zu liegen kommt.
Vielleicht bringt es auch was, die Q-Matten einmal nach Breite und einmal nach Länge sortiert zu haben.
Dann könnt man im Bild nach Matte 1 direkt Matte 3 daneben legen, um so ständig optimale Füllung zu behalten.
Gruß Horst
Einloggen, um Attachments anzusehen!
|
|
JDKDelphi 
      
Beiträge: 115
Erhaltene Danke: 22
WIN2000, XP, WIN 7 , UNIX, LINUX
Assembler für (Z8x, 68xxx,R6000,Intel), DELPHI 6 Enterprise, MAGIC eDeveloper V9+V10, C++, C#,VB, .NET, zertifizierter iBOLT-Programmierer
|
Verfasst: Mi 05.08.09 16:21
Hallo Freunde,
vielen Dank für die Antworten und Tipps
Das "Rucksackproblem" hatte ich schon getestet, scheidet jedoch aus.
@[quote]Horst_H:
Deine Version habe ich eigentlich schon eingebaut, die Sortierung entscheidet jedoch, ob richtig optimiert wird.
Da werde ich wohl noch mal stricken müssen, da manchmal eine Matte mehr rauskommt.
Nun, was habe ich jetzt..
Ein Objekt, was in einer DLL verpackt ist, da diese in einer anderen Programmiersprache verwendet wird (MAGIC E-Developer V9/V10 UniPaas)
Leider scheiden hierbei OCX'en und dergleichen aus, sodass ich konventionell programmieren muss....MAGIC kann keine OCX und COM-Objekte etc.
Dort werden auch die Datenbankzugriffe ermöglich und nur MatNr,Länge und Breite an die DLL übergeben.
Die berechnet während der NewEntry-Funktion gleich den Platz, wo die Matte eingefügt werden kann und erzeugt ein neues Listenobjekt, wenn kein Platz mehr frei ist.
Somit habe ich hinterher anhand der Funktion z.B. ...TObjectlist.count die Gesamtanzahl der benötigten Matten.
Die Collection lese ich aus und je nach Materialnummer wird in die Datenbank ein Satz weggeschrieben und gleichzeitig auf die Materialnummer verdichtet.
Gleichzeitig wird der Optimierungsfaktor berechnet und die möglichen Grafikpositionen in einer Liste pro Objekt gespeichert.
So kann ich auch gleich ein paar lockere Grafiken erzeugen und ausdrucken.
Das ganze funktioniert schon
Ich packe mal das Testprogramm in ein ZIP und hänge das dran..
Vielleicht kann das ja auch jemand anderes verwenden wie schon meine FFT-Komponente..
Wenn es vielleicht noch Tipps gibt, wäre ich dankbar
Gruss
Einloggen, um Attachments anzusehen!
_________________ Wo andere aufhören, fange ich erst an..
|
|
|