|
Autor |
XPRESS Mosel 2D Strip Packing Problem |
|
Schnur98
Neu  Dabei seit: 08.03.2022 Mitteilungen: 2
 | Themenstart: 2022-03-08
|
Ich weiß nicht, ob mir jemand hier im Forum helfen kann. Auf jeden Fall ist es einen Versuch wert. Ich muss für die Uni ein zweidimensionales Strip-Packing Problem programmieren. Rechtecke (um es für den Anfang einfach zu halten, sollen nur 5 Rechtecke platziert werden) sollen ohne Überlappung (dafür stehen die Schaltervariablen s1-s4, damit sich die Rechteck nicht rechts/links/oben/unten überlappen) und nicht drehbar platziert werden, so dass die Gesamthöhe minimal ist. Ich konnte zwar alle Nebenbedingungen aufstellen, aber ich finde keine passende Formulierung für die Zielfunktion. Vielleicht kann mir hier jemand helfen. Dies ist der Code, den ich bis jetzt programmiert habe. Vielleicht kann mir tatsächlich jemand helfen. 😄 Danke schon mal im Voraus.
\sourceon
\numberson
W =50
Anzahl=5
M=10000
end-parameters
!sample declarations section
declarations
Objective:linctr
Packete=1..Anzahl
x: array(Packete) of mpvar
y: array(Packete) of mpvar
s1: array(Packete, Packete) of mpvar
s2: array(Packete, Packete) of mpvar
s3: array(Packete, Packete) of mpvar
s4: array(Packete, Packete) of mpvar
w: array(Packete) of real
h: array(Packete) of real
end-declarations
h::[10, 20, 30, 60, 50]
w::[50, 30, 20, 20, 30]
forall (i in Packete) do
x(i)>=0
y(i)>=0
end-do
forall (i in Packete, j in Packete) do
s1(i,j) is_binary
end-do
forall (i in Packete, j in Packete) do
s2(i,j) is_binary
end-do
forall (i in Packete, j in Packete) do
s3(i,j) is_binary
end-do
forall (i in Packete, j in Packete) do
s4(i,j) is_binary
end-do
forall (i in Packete) do
x(i)+w(i)<=W
end-do
forall (i in Packete) do
forall (j in Packete) do
if i<>j then
x(i)+w(i)<=x(j)+M*(1-s1(i,j))
end-if
end-do
end-do
forall (i in Packete) do
forall (j in Packete) do
if i<>j then
x(j)+w(j)<=x(i)+M*(1-s2(i,j))
end-if
end-do
end-do
forall (i in Packete) do
forall (j in Packete) do
if i<>j then
y(i)+h(i)<=y(j)+M*(1-s3(i,j))
end-if
end-do
end-do
forall (i in Packete) do
forall (j in Packete) do
if i<>j then
y(j)+h(j)<=y(i)+M*(1-s4(i,j))
end-if
end-do
end-do
forall (i in Packete, j in Packete) do
if i<>j then
s1(i,j)+s2(i,j)+s3(i,j)+s4(i,j)>=1
end-if
end-do
\sourceoff
|
Profil
| Folgende Antworten hat der Fragensteller vermutlich noch nicht gesehen. Er/sie war noch nicht wieder auf dem Matheplaneten |
StefanVogel
Senior  Dabei seit: 26.11.2005 Mitteilungen: 4195
Wohnort: Raun
 | Beitrag No.1, eingetragen 2022-04-16
|
Die Frage ist hier beantwortet.
|
Profil
|
Das Thema wurde von einem Senior oder Moderator abgehakt. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|