2016-10-11 7 views
1

LpVariable (PuLP 1.6.1, Python 3.5)으로 정의 된 변수의 값을 인쇄하려고합니다. LpVariable에는 매개 변수의 범주를 '정수'로 설정하는 옵션이 있습니다. 그러나 이것은 변수를 인쇄하도록 요청할 때 값이되지는 않습니다.Python, PuLP : LpVariable을 정수로 변환

Status: Optimal 
Prod_Laptop_February = 1000.0 
Prod_Laptop_January = 50.0 
Prod_Laptop_March = 1500.0 
Prod_Phone_February = 2000.0 
Prod_Phone_January = 1880.0 
Prod_Phone_March = 2000.0 
Prod_Tablet_February = 3000.0 
Prod_Tablet_January = 1950.0 
Prod_Tablet_March = 2000.0 
Total Costs = -76900.0 
5*Prod_Laptop_January + 2*Prod_Phone_January + 4*Prod_Tablet_January - 20000 

마지막 줄 내가 정수 값이 될 것으로 예상하지만되지 않습니다 :

from pulp import * 

prob = LpProblem("Gadget Production", LpMinimize) 

# Demand scheme x (Laptops), y (Phones), and z (Tablets) 
x = [75, 125, 1000, 1500] 
y = [120, 2000, 2000, 2000] 
z = [50, 2000, 3000, 2000] 

PL1 = LpVariable('Prod Laptop January', cat=int) 
PL2 = LpVariable('Prod Laptop February', cat=int) 
PL3 = LpVariable('Prod Laptop March', cat=int) 

PP1 = LpVariable('Prod Phone January', cat=int) 
PP2 = LpVariable('Prod Phone February', cat=int) 
PP3 = LpVariable('Prod Phone March', cat=int) 

PT1 = LpVariable('Prod Tablet January', cat=int) 
PT2 = LpVariable('Prod Tablet February', cat=int) 
PT3 = LpVariable('Prod Tablet March', cat=int) 

# Inventory (I) of gadget (L, P, T), in month [i]: 
IL1 = x[0] + PL1 - x[1] 
IL2 = IL1 + PL2 - x[2] 
IL3 = IL2 + PL3 - x[3] 

IP1 = y[0] + PP1 - y[1] 
IP2 = IP1 + PP2 - y[2] 
IP3 = IP2 + PP3 - y[3] 

IT1 = z[0] + PT1 - z[1] 
IT2 = IT1 + PT2 - z[2] 
IT3 = IT2 + PT3 - z[3] 

# Constraints to meet demand scheme 
prob += x[0] + PL1 >= x[1] 
prob += IL1 + PL2 >= x[2] 
prob += IL2 + PL3 >= x[3] 

prob += y[0] + PP1 >= y[1] 
prob += IP1 + PP2 >= y[2] 
prob += IP2 + PP3 >= y[3] 

prob += z[0] + PT1 >= z[1] 
prob += IT1 + PT2 >= z[2] 
prob += IT2 + PT3 >= z[3] 

# Constraints to meet maximal production hours 
prob += 5*PL1 + 2*PP1 + 4*PT1 <= 23000 
prob += 5*PL2 + 2*PP2 + 4*PT2 <= 23000 
prob += 5*PL3 + 2*PP3 + 4*PT3 <= 23000 

# Overtime costs, function to be minimized 
OT1 = (5*PL1 + 2*PP1 + 4*PT1) - 20000 
OT2 = (5*PL2 + 2*PP2 + 4*PT2) - 20000 
OT3 = (5*PL3 + 2*PP3 + 4*PT3) - 20000 

prob += IL1 + IL2 + IL3 + IP1 + IP2 + IP3 + IT1 + IT2 + IT3 + 10 * (OT1 + OT2 + OT3) 

# Solve the problem 
prob.solve() 

# print solve status 
print("Status:", LpStatus[prob.status]) 

# Print optimum values 
for v in prob.variables(): 
    print(v.name, "=", v.varValue) 

print("Total Costs = ", value(prob.objective)) 
print(OT1) 

이 나에게 다음과 같은 결과를 제공합니다 은 이에 문제의 일부는 내가 해결하기 위해 노력하고 있습니다. 누군가 표현을 정수 값으로 변환하는 방법을 설명 할 수 있습니까?

답변

2

코드의 마지막 인쇄 상태가 PuLP 표현식을 인쇄합니다. 그것이 비 - 원시 파이썬 객체이기 때문에, 문자열 표현은 PuLP (클래스 내에서 오버로딩)에 의해 정의됩니다.

이 경우 표현식 자체는 사람이 읽을 수있는 형식으로 제공됩니다. 당신이 그것의 값에 액세스하려면

, 그냥와 마지막 줄을 대체 : 속임수를 썼는지,

print(OT1.value()) 
+0

감사합니다! – Jeroen