我正在尝试通过对具有 100 个变量的问题使用神秘来实现具有 16 个线性不等式约束和一个线性等式约束的非线性优化。当我使用 linear_symbolic 模块创建约束时,执行卡住了。我发现没有其他明显的方法来添加约束。
Scipy 的最小化模块为不是二次型的目标函数(我的目标是相对熵)产生了不好的解决方案,并且当起始值不是很接近最优解决方案时,我不得不放弃它。这实际上是 Mike McKerns 在激励神秘主义者时提出的观点,所以当我碰到它时我很高兴。
我尝试了以下两行:
cf = mystic.symbolic.linear_symbolic(np.ones(100),[1.],G,h)
cons = mystic.symbolic.generate_constraint(mystic.symbolic.generate_solvers(mystic.symbolic.simplify(cf)))
其中 G 是一个 16x100 的系数矩阵,h 是一个 16 维向量,包含不等式右侧的常数。
代码在上面的第一行执行相对较快,但它从不通过第二行(我的计算机在长时间等待后崩溃)。