将优化模型放入循环中
Put in a loop an optimization model
我想将优化模型放入循环中,以便使用持久求解器进行一些重新优化。我已经编写了所有代码来提取数据和模型。现在我需要将不同的部分放在函数中以便调用它们。
目标是做类似的事情:
for file in files:
data = extract_data(file)
model = construct_model(data)
model.solve()
for iter in ...:
# resolve model
# save results
基本上我只使用条件语句来提取我的数据而从未使用过函数,所以我所做的就是将所有代码复制到这样的函数中:(我有 1000 多行):
def extract_data():
Nurse_DayoffID_D = {}
UDay_ID = []
for k,v in ID_Dayoff.items():
for x,d in enumerate(v):
Nurse_DayoffID_D[(k,x+10)]=d
UDay_ID.append(x+10)
[...]
return
现在如果我对具体模型做同样的事情:
def model():
model.N = Set(initialize = N)
[...]
def obj_function(model):
return(
sum(Penalty_Sigma * model.w[n,d1,d2] + Penalty_Tau * model.r[n,d1,d2] for (d1,d2) in P)
[...]
)
model.ObjFunction = Objective(rule=obj_function, sense=minimize)
def constraint_1(model, s, d):
return sum(model.x[n, s, d] for n in model.N) == R[d,s]
model.C1 = Constraint(model.S, model.D, rule=constraint_1)
[...]
return
for file in files:
data = extract_data(file)
model = construct_model(data)
model.solve()
for iter in ...:
# resolve model
# save results
你觉得它没用了吗?
- 它会起作用。
- 我建议您不要使用
iter
这个词,因为它是一个 Python 内置函数。
对于给定的迭代次数,您可以这样做:
# Run it 3 times
for _ in range(3):
results = process_model()
save_results(results)
我想将优化模型放入循环中,以便使用持久求解器进行一些重新优化。我已经编写了所有代码来提取数据和模型。现在我需要将不同的部分放在函数中以便调用它们。
目标是做类似的事情:
for file in files:
data = extract_data(file)
model = construct_model(data)
model.solve()
for iter in ...:
# resolve model
# save results
基本上我只使用条件语句来提取我的数据而从未使用过函数,所以我所做的就是将所有代码复制到这样的函数中:(我有 1000 多行):
def extract_data():
Nurse_DayoffID_D = {}
UDay_ID = []
for k,v in ID_Dayoff.items():
for x,d in enumerate(v):
Nurse_DayoffID_D[(k,x+10)]=d
UDay_ID.append(x+10)
[...]
return
现在如果我对具体模型做同样的事情:
def model():
model.N = Set(initialize = N)
[...]
def obj_function(model):
return(
sum(Penalty_Sigma * model.w[n,d1,d2] + Penalty_Tau * model.r[n,d1,d2] for (d1,d2) in P)
[...]
)
model.ObjFunction = Objective(rule=obj_function, sense=minimize)
def constraint_1(model, s, d):
return sum(model.x[n, s, d] for n in model.N) == R[d,s]
model.C1 = Constraint(model.S, model.D, rule=constraint_1)
[...]
return
for file in files:
data = extract_data(file)
model = construct_model(data)
model.solve()
for iter in ...:
# resolve model
# save results
你觉得它没用了吗?
- 它会起作用。
- 我建议您不要使用
iter
这个词,因为它是一个 Python 内置函数。
对于给定的迭代次数,您可以这样做:
# Run it 3 times
for _ in range(3):
results = process_model()
save_results(results)