Pyomo:为什么求解器会找到指定域之外的值?

问题描述 投票:0回答:1

编辑以更好地解决我的问题。

有一个变量 x 代表一年中的某一天,即 1-365。有些日子是不允许的。因此,我创建了一个包含有效日期选项的列表,然后使用

model.jan = pyo.Set(initialize=month_lists[1])
设置了 pyomo。

我定义我的映射如下:

def x_domain(model, i, j):
    domain_mapping = {
        0: model.pdec,
        1: model.jan,
        2: model.feb,
        ...
    }
    return domain_mapping.get(i)

然后创建我的变量 x:

model.x = pyo.Var(model.months, model.cycles, domain=x_domain)

该域看起来与我检查时所期望的一模一样,但求解器仍在寻找违反该域的解决方案。 一月域名

Key | Lower | Value | Upper | Fixed | Stale | Domain

(1, 6) :     1 :       7.0 :    31 : False : False :    jan

因此,当变量明确不在域中时,变量会找到 7 作为值。

我可以想出其他方法来写这篇文章,只是对为什么这种方法似乎不起作用感到困惑。 pyomo 文档似乎支持离散整数集。

optimization linear-programming pyomo
1个回答
0
投票

我会以不同的方式建模:

 set wd (working days)
 binary variable x(wd)
 sum(wd,x(wd)) = 1

将 wd 制作为一个大的一维集合(而不是 (month,dayofmonth) 元组)可能会更容易。

© www.soinside.com 2019 - 2024. All rights reserved.