1
그래서 내 인생에서 pyomo 프로그램을 실행할 수 없습니다. 이 하나에서 다른 종류의지도 것들, 당신을 어떻게 작동하는지에 대한 이해에서비어있는 모델 pyomo
set warehouses := warehouseone warehousetwo warehousethree warehousefour;
set stores := storeone storetwo storethree storefour storefive storesix;
param cost:
storeone storetwo storethree storefour storefive storesix :=
warehouseone 23 12 34 25 27 16
warehousetwo 29 24 43 35 28 19
warehousethree 43 31 52 36 30 21
warehousefour 54 36 54 46 34 27;
param m := 4 ;
param n := 6 ;
param: a:=
warehouseone 15
warehousetwo 25
warehousethree 40
warehousefour 70;
param: b :=
warehouseone 10
warehousetwo 5
warehousethree 7
warehousefour 4;
param: d :=
storeone 45
storetwo 120
storethree 165
storefour 214
storefive 64
storesix 93;
:
from pyomo.environ import *
#pyomo solve --solver=glpk diet.py diet.dat
model = AbstractModel()
# Foodss
model.m = Param(within=NonNegativeIntegers)
model.n = Param(within=NonNegativeIntegers)
model.warehouses = RangeSet(1, model.m)
model.stores = RangeSet(1, model.n)
model.cost = Param(model.warehouses,model.stores)
model.a = Param(model.warehouses)
model.b = Param(model.warehouses)
model.d = Param(model.stores)
model.amounts = Var(model.warehouses, model.stores, within = NonNegativeIntegers)
model.pprint()
# Minimize the cost of food that is consumed
def cost_rule(model):
return sum(
model.cost[n,i] * model.amounts[n,i]
for n in model.warehouses
for i in model.stores
)
model.cost = Objective(rule=cost_rule)
def minDemandRule(store, model):
return sum(model.a[i]*model.amounts[i, store] for i in model.warehouses) >= model.d[store]
model.demandConstraint = Constraint(model.stores, rule=minDemandRule)
# Limit the volume of food consumed
def maxSupplyRule(warehouse,model):
return sum(model.amounts[warehouses,j] for j in model.stores) <= self.b[warehouse]
model.supplyConstraint = Constraint(model.warehouses, rule=maxSupplyRule)
플러스의 .dat 파일 :
나는 내 파이썬 파일이 있습니다. 이것은 나에게 좋은 것처럼 보이지만 내가 그것을 실행할 때. DAT 파일이 제대로 읽을되지 않는 것처럼
pyomo solve --solver=glpk transport.py data.dat
[ 0.00] Setting up Pyomo environment
[ 0.00] Applying Pyomo preprocessing actions
2 Set Declarations
amounts_index : Dim=0, Dimen=2, Size=0, Domain=None, Ordered=True, Bounds=None
Virtual
cost_index : Dim=0, Dimen=2, Size=0, Domain=None, Ordered=True, Bounds=None
Virtual
2 RangeSet Declarations
stores : Dim=0, Dimen=1, Size=0, Domain=None, Ordered=True, Bounds=None
Not constructed
warehouses : Dim=0, Dimen=1, Size=0, Domain=None, Ordered=True, Bounds=None
Not constructed
6 Param Declarations
a : Size=0, Index=warehouses, Domain=Any, Default=None, Mutable=False
Not constructed
b : Size=0, Index=warehouses, Domain=Any, Default=None, Mutable=False
Not constructed
cost : Size=0, Index=cost_index, Domain=Any, Default=None, Mutable=False
Not constructed
d : Size=0, Index=stores, Domain=Any, Default=None, Mutable=False
Not constructed
m : Size=1, Index=None, Domain=NonNegativeIntegers, Default=None, Mutable=False
Not constructed
n : Size=1, Index=None, Domain=NonNegativeIntegers, Default=None, Mutable=False
Not constructed
1 Var Declarations
amounts : Size=0, Index=amounts_index
Not constructed
11 Declarations: m n warehouses stores cost_index cost a b d amounts_index amounts
WARNING: Implicitly replacing the Component attribute cost (type=<class 'pyomo.core.base.param.IndexedParam'>) on block unknown with a new Component (type=<class 'pyomo.core.base.objective.SimpleObjective'>).
This is usually indicative of a modelling error.
To avoid this warning, use block.del_component() and block.add_component().
[ 0.01] Creating model
ERROR: Constructing component 'a' from data={'warehousefour': 70, 'warehouseone': 15, 'warehousethree': 40, 'warehousetwo': 25} failed:
RuntimeError: Failed to set value for param=a, index=warehousefour, value=70.
source error message="Error setting parameter value: Index 'warehousefour' is not valid for array Param 'a'"
[ 0.02] Pyomo Finished
ERROR: Unexpected exception while running model:
Failed to set value for param=a, index=warehousefour, value=70.
source error message="Error setting parameter value: Index 'warehousefour' is not valid for array Param 'a'"
는 느낌,하지만 난 다른 예를 볼 때,이 그것을 수행하는 방법, 그래서 조금 당황 해요.
안녕 Timofey, 자세한 답변을 보내 주셔서 감사합니다. 코드를 살펴보면 내가 실수 한 곳을 알 수 있습니다. 단지 호기심이 생겼습니다. 왜냐하면 변수 파일이 솔루션 파일에보고되지 않는다면 새로운 것이기 때문에 동일하다고 가정합니다. 지도와 도움을 주셔서 감사합니다. – Eigenvalue
@Eigenvalue 예, 솔루션에 표시되지 않은 변수는 항상 0으로 가정합니다. –