我使用pythonapi到cplex来解决一个优化问题:找到一组大小为N(例如10)的二进制变量,以最大化它们之间的相互距离。为此,我整理了以下内容:
matrix = pd.read_csv("matrix.csv", index_col=0)
# declare integer variables
im = Model(name='max_weight_clique')
b = im.binary_var_dict(matrix.index.values)
# define objective function
clique_weight = im.sum(b[i] * b[j] * (matrix.loc[i, j] + matrix.loc[j, i])
for i, j in itertools.combinations(matrix.index, 2))
# add to key performance indicators
im.add_kpi(clique_weight, 'clique_weight')
# set size of clique
im.add_constraint(im.sum(b) == 10)
im.maximize(clique_weight)
我想修改我的目标函数,取而代之的是使最小距离最大化。当我试图指定如下所示时,我遇到了一个错误:
^{pr2}$TypeError: cannot convert a constraint to boolean: acc_num_NC_015394 == 1
如何正确指定此约束?这似乎与SO有关,但我的问题是pythonapi特有的。在
公式中的问题是,迭代器中涉及二进制决策变量的“==”测试没有被识别为模型约束。在
对这种约束建模的一个选择是使用指示符约束。 下面是一个可能的公式:
我不认为这个公式是非常有效的。在
相关问题 更多 >
编程相关推荐