我正在用Python编写一个程序,其中一小部分涉及到优化方程组/不等式。理想情况下,我会想做在Modelica中可以做的事情,写出方程并让求解者来处理它。
求解器和线性规划的操作有点超出了我的舒适范围,但我还是决定尝试。问题是,程序的一般设计是面向对象的,有许多不同的组合形式来形成方程,还有一些非线性,所以我无法将它转化为线性规划问题(但我可能错了)。
经过一些研究,我发现的解决者似乎做了我想做的事情。我想出了这个(这看起来是我想要优化的一个典型例子):
from z3 import *
a = Real('a')
b = Real('b')
c = Real
我想找到一组数值方程的解,我想知道合金是否可以用于这个问题。
我发现关于合金的有限信息似乎表明(至少对我来说)这是可以做到的,但我没有发现类似问题的例子。
这当然不容易,所以在投资时间和一些钱在文学之前,我想知道这是否可行。
简化示例:
(1) a + b = c, (2) a > b, (3) a > 0, (4) b > 0, (5) c > 0
一种解决办法是
a = 2, b = 1, c = 3
对合金或更好的工具/解决方案的可用性有任何见解将不胜感激。
致以亲切的问候,
保罗。
我在IPOPT (v3.12.10)中遇到本地不可行错误。
Converged to a point of local infeasibility. Problem may be infeasible.
我还使用m.options.SOLVER=1对APOPT求解器进行了尝试,并得到了类似的错误。
No feasible solution
这个问题有两个方程和三个变量的多个可行解。这个问题的解决方案是平面与球体相交的地方。
from gekko import GEKKO
m = GEKKO()
x=m.Var(); y=m.Var(); z=m.Var()
m.Equations([x**2+
其中a=∑(1 - C(i)/∑D(i)^b,b是双精度值,1到n( +ve整数)的求和超过i,C和D是等长向量。
我想找出0<b<无穷大时第一个表达式的最大值
到目前为止,我就是这么做的。
val lp = new LinearProgram()
import lp._
val d = DenseVector(0.1, 0.23, 0.45)
val c = DenseVector(2.3, 4.5, 0.45)
val b= Real()
import breeze.numerics._
val one = Intege
这可以分解成一个简单的三组方程:
a + b = 3
b + c = 5
a + c = 4
怎样才能最好地近似这些值呢?注意,在实际应用程序中,我将有更多这样的总计和变量。特别是,我想找出是否有可能根据商品清单和从杂货收据中得出的总数来有效地估算食品成本。我假设,如果我能计算出成本,将有不同的精度范围,我可以预期,因此,一个额外的将是知道有多可能的近似是正确的,在什么范围内的价格必须是。
编辑:我只是看不出这得到了一个我觉得舒服的答案,因为我一开始就没有把这个问题正确地组织起来。
我的例子:方程组
伪码约束基
a = b+c
∧ e = a*c
∧ a = +2 ; some replaceable concrete values
∧ c = +18
溶液
b = -16
∧ e = -32
我想要的信息
在方程组中,我想得到以下知识:
抽象公式,我可以用它从给定的值(在约束基中)计算变量值(解决方案)。
(就像在高中,老师不仅希望看到结果,还希望看到这样一个经过改造的抽象公式。)
公式如.
b = a-c ; is an equivalent transformation from `a = b+c`
∧ e = (a-c)*c ; is
我和Cplex有过麻烦,我不知道为什么。因此,我附加了一段代码:
dvar int+ soglia[pazienti][giorni][slot];
dvar int+ sogliar[pazienti][giorni][slot];
dvar int+ soglial[pazienti][giorni][slot];
forall(k in giornidue, w in slot) sum(j in pazienti)(soglia[j,k,w]+sogliar[j,k,w]+soglial[j,k,w]) > sum(j in pazienti)(soglia[j,k-
我试图解n个变量的线性方程组。我使用了cramer规则,但当行列式等于零时,它失败了。如何处理这个问题?
我使用的是c语言。
我的线性方程也是这样的:
对于n = 3
- x + y + z = a
x - y + z = b
x + y - z = c
对于n = 2
- x + y = a
x - y = b
我不能再继续下去了。
我试图让自己成为一个小脚本或一些东西,可以帮助我找到达到目标值所需的最低数量的组合。但我很难找到这样的方法,因为我所能找到的只是类似的问题,但只有一个和,而不是一组数字。
考虑一下这张表:
| X | Y | Z
A | 4 4
B | 5 5
C | 4 4
D | 3 3 3
A,B,C,D是不同的集,产生不同数量的X,Y,Z。
现在假设我们的目标是40X,80Y,60Z。
通过人工试验和错误,我可以找到的最低组合集合是21,并且有多个变体达到这个目标。
例如: 0A,9B,7C,5D = 43X,88Y,60Z,还有1A,8B,6C,6D
有谁知道在处理典型的MILP (混合整数线性规划)问题时,这两个来自Java和SCIP for Python的求解器(Oj算法)在处理典型的MILP(混合整数线性规划)问题时,如何在性能方面相互关联(例如:哪一个是最快的)?乍一看,我似乎在网上找不到任何可以为我指明正确方向的东西,我很好奇!
提前感谢!