pyomo, переменная суммы по индексу, превышающему определенное значение

#model file: test.py
from pyomo.environ import *
model = AbstractModel()
model.T = Param(within=NonNegativeIntegers)
model.TS = RangeSet(1,model.T)
model.i = Param(default=1, mutable=True)
model.x = Var(model.TS, within=NonNegativeReals)
def obj_rule(model):
    return sum(model.x[t] for t in model.TS if t >= model.i())
model.obj = Objective(rule=obj_rule, sense=minimize)

def con_rule(model, t):
    return model.x[t] == 2
model.con = Constraint(model.TS, rule=con_rule)

параметр T:= 5

ниже мой файл запуска для этого test.py

from pyomo.environ import *
from test import *
import test as test

DK = [2,4]
for j in DK:
   opt = SolverFactory('cplex')
   inst = test.model.create_instance('test.dat')
   inst.i = j
   print inst.i()
   result = opt.solve(inst)
   inst.solutions.load_from(result)
   print 'objective', inst.obj()

выходные результаты:

2

цель 10.0

4

цель 10.0

Привет,

Выше мой пример кода и результаты. В целевой функции я хочу суммировать x по ее индексу t, большему, чем параметр i. Ожидается, что объективное значение будет 8 и 4 для параметра i = 2 и 4 соответственно. Тем не менее, обе цели принимают 10 заданных параметров i =1 в настройках по умолчанию. Кажется, что параметр i не влияет на целевую функцию.

Я пытался добавить inst.reconstruct() после назначения нового inst.i, чтобы обновить obj_rule, но не работает.

Любая помощь, чтобы решить проблему? Я очень ценю ваш любой ответ!

Лучший,

0 ответов

Другие вопросы по тегам