Autor Beitrag
JDKDelphi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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 user profile iconAXMD: Topic aus Off Topic verschoben am So 02.08.2009 um 13:18

_________________
Wo andere aufhören, fange ich erst an..
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 01.08.09 11:39 
user profile iconJDKDelphi hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 191
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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..