神秘的非线性优化未满足约束条件吗?

时间:2019-10-16 22:50:32

标签: python mystic

我有一个很大的优化问题,我需要最小化非线性目标函数,要遵循多个等式和不等式约束,并且我所有的变量都是二进制变量。我写了一段神秘的代码,但有时结果不能满足指定的约束。具体来说,结果是,当将其成形为矩阵时,每一列的总和应为1。

就像在神秘的示例中一样,我传递了一个函数,以使所有变量在优化算法调用的约束字段中都是二进制的,并传递根据约束产生的惩罚。

@discrete([0.0, 1.0])
def make_binaryv(x):
  return x

#generates constraints for mystic solver from string eqn
cf = generate_constraint(generate_solvers(simplify(eqn)))
#generate penalties for mystic solver from string eqn
pf = generate_penalty(generate_conditions(simplify(eqn))

#diffev is minimization function
result = diffev2(f, x0=bnds, bounds=bnds, penalty=pf, constraints=make_binaryv, npop=40, disp=False, full_output=True, gtol=100)

在上面的代码中:eqn是我所有约束的字符串。每个约束都在单独的行中。

输出的每一列的总和应为1,但我得到的是:

[[1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 0.]
 [1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

有什么办法可以在约束字段中同时传递约束和二进制条件,而不使用惩罚字段?

0 个答案:

没有答案