python解不等式方程_Python – 优化不等式系统

我正在研究

Python中的一个程序,其中一小部分涉及优化方程/不等式系统.理想情况下,我本来想做的就像在Modelica中一样,写出方程并让解算器处理它.

解算器和线性编程的操作有点超出我的舒适范围,但我决定尝试.问题是程序的一般设计是面向对象的,组合方程有许多不同的可能性,以及一些非线性,所以我无法将其转化为线性规划问题(但我可能错了).

经过一些研究,我发现Z3求解器似乎做了我想要的.我想出了这个(这看起来像我想要优化的典型情况):

from z3 import *

a = Real('a')

b = Real('b')

c = Real('c')

d = Real('d')

e = Real('e')

g = Real('g')

f = Real('f')

cost = Real('cost')

opt = Optimize()

opt.add(a + b - 350 == 0)

opt.add(a - g == 0)

opt.add(c - 400 == 0)

opt.add(b - d * 0.45 == 0)

opt.add(c - f - e - d == 0)

opt.add(d <= 250)

opt.add(e <= 250)

opt.add(cost == If(f > 0, f * 50, f * 0.4) + e * 40 + d * 20 +

If(g > 0, g * 50, g * 0.54))

h = opt.minimize(cost)

opt.check()

opt.lower(h)

opt.model()

现在这个工作,并给我我想要的结果,尽管它不是非常快(我需要解决这样的系统数千次).

但我不确定我是否正在使用正确的工具(Z3是一个“定理证明者”).

API基本上就是我需要的,但我很好奇其他包是否允许类似的语法.或者我应该尝试以不同的方式制定问题以允许标准LP方法? (虽然我不知道怎么样)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值