Toon posts:

[Cplex] Mixed integer problem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb onderstaand probleem als ik het oplos dmv opt dan krijg ik er niet gehele getallen uit. Weet iemand hoe ik kan zorgen dat er alleen maar gehele getallen uitkomen?
Ik heb de help file geprobeerd en ik het www.scplex.com doorgeploegd. Ook google kon me niet helen. De search op GOT ook niet


maximize
obj: 20(18000 BA1 + 20000 BB1 + 6000 BC1)+
14(20000 BA2 + 23000 BB2 + 8000 BC2) +
16(19000 BA3 + 21000 BB3 + 8000 BC3) -
40 x1nee + 28 x2nee + 32 x3nee
- 18000 BA1 - 24000 BA2 - 20000 BA3
- 18000 BB1 - 22000 BB2 - 19000 BB3
- 8000 BC1 - 16000 BC2 - 14000 BC3
Subject to
c1: 18000 BA1 + 20000 BB1 + 6000 BC1 + x1nee >= 300000
c2: 20000 BA2 + 23000 BB2 + 8000 BC2 + x2nee >= 400000
c3: 19000 BA3 + 21000 BB2 + 8000 BC3 + x3nee >= 200000
c4: BA1 + BA2 + BA3 <= 18
c5: BB1 + BB2 + BB3 <= 7
C6: BC1 + BC2 + BC3 <= 31
BOUNDS
BA1 >=0
BA2 >=0
BA3 >=0
BB1 >=0
BB2 >=0
BB3 >=0
BC1 >=0
BC2 >=0
BC3 >=0
x1nee >= 0
x2nee >= 0
x3nee >= 0
END

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Dan zul je er een "integer linear programming" (ILP) probleem van moeten maken.
Als het goed is moet Cplex dat gewoon kunnen.

Even ter vergelijking:
een normaal lineair programmeren probleem kan in worst-case polynominale tijd, hoewel cplex dat algoritme niet gebruikt, maar een ander die in de praktijk sneller is.

een integer linear programming probleem is NP-lastig. Dat is zeg maar een stapje lastiger. Als het niet meer lukt om dit binnen fatsoendelijk tijd op te lossen, zou je er ook aan kunnen denken om het wel fractioneel op te lossen en af te ronden naar gehele getallen. Dit is niet voor elk probleem een oplossing.

offtopic:
Maar als bovenstaande ook het probleem is dat je met cplex op wilt lossen is, dan kan je dat ook wel met excel doen. Een variabele of 10 lukt de excel plugin nog wel :o

[ Voor 136% gewijzigd door Infinitive op 20-06-2004 14:36 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • hammerhead
  • Registratie: April 2000
  • Laatst online: 21-05 07:47
Cplex kan dat idd zonder problemen doen.

Vanuit de console kun je opgeven dat je je probleem wilt omzetten naar een MIP. Daarna kun je je variabelen omzetten naar Binaries / Integers.

In je .lp bestand kun je het ook handmatig doen door het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\Problem name: foo.lp

Minimize
 obj: IloX0 + IloX1 + IloX2 + IloX3 + IloX4
Subject To
 IloC0: 5 IloX0 >= 48
 IloC1: 2 IloX1 >= 35
 IloC2: 2 IloX2 >= 24
 IloC3: 2 IloX3 >= 10
 IloC4: IloX4 >= 8
Bounds
 0 <= IloX0 <= Inf
Binaries
 IloX0 
End

Dit is dus in geval {0,1} probleem (BIP)... Voor standaard integers, binaries vervangen door General dacht ik.

Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker