运行pyomo时偶尔出现此错误:“错误:将对象评估为数值:0.0”。它看起来有点像某些求解器返回时产生的错误,例如,0.0而不是0,然后在使用Var函数的in = Binary关键字参数重新使用结果时会导致错误。我不相信这是这种情况。任何人都可以给我一些关于可能导致此错误的想法吗?我当时正在使用glpk。
这里有更多信息。我正在按顺序解决一个优化问题,一次一天。因此,昨天的解决方案成为今天问题的输入。这是一些简化的代码spinets:
results = manager.solve(instance, kwargs...)
instance.solutions.load_from(results)
states_dict = get_next_states(instance, time, args...)
def get_next_states(instance, time, args...):
states_dict = {}
for state in states:
var = getattr(instance, state)
for a in a_list:
value = var[a, time].value
states_dict[state, a] = force_domain(value, integer, tolerance)
return states_dict
force_domain强制值为整数和/或非负,具体取决于整数和容差参数。评估force_domain时代码失败;有时会出现上述错误,有时会出现TypeError异常:TypeError:unorderable types:NoneType()< INT()。这是force_domain:
def force_domain(x, integer, nonnegative):
y = x
if x < 0 and nonnegative:
y = chop_tiny(y, nonnegative)
if integer:
y = round_if_int(y)
return y
def chop_tiny(x, tol):
if abs(x) > tol or isinstance(x, int):
return x
else:
return 0.0
def round_if_int(x):
if isinstance(x, float) and (x).is_integer():
return int(x)
else:
return x
这些错误在2000次运行中少于1次。
这些额外信息可以帮助您回答我的问题吗?
答案 0 :(得分:0)
我设法隔离并重现错误。事实证明,由于GLPK v4.57中的数值不稳定导致了崩溃。这种数值不稳定性似乎已在GLPK v4.60中得到修正。请参阅https://lists.gnu.org/archive/html/info-gnu/2016-04/msg00000.html。