你能告诉我任何可以帮助解决析取编程问题的现有软件吗?
问题如下。
我们有单位 3D 平面(它们是已知的)。让我们将它们写成如下:。
有了固定的数字和,我们想要找到 3D 平面和 3D 点使得:
- 平面和点满足关联结构: ,其中是固定已知集。
- 由平面界定的多面体是凸的。
并最小化函数。
由于我们在泛函中有一个,所以上述问题可以表述为一个析取编程程序,如下所示:
我从互联网上读到这样的问题被称为析取编程。你能给出任何提示可以使用哪个软件来解决它吗?
你能告诉我任何可以帮助解决析取编程问题的现有软件吗?
问题如下。
我们有单位 3D 平面(它们是已知的)。让我们将它们写成如下:。
有了固定的数字和,我们想要找到 3D 平面和 3D 点使得:
并最小化函数。
由于我们在泛函中有一个,所以上述问题可以表述为一个析取编程程序,如下所示:
我从互联网上读到这样的问题被称为析取编程。你能给出任何提示可以使用哪个软件来解决它吗?
我没用过,但是Pyomo,一个看似得到很好支持的建模软件,包含一个用于广义析取编程的模块。
他们在上述链接中提供的众多示例之一如下所示:
m = ConcreteModel()
m.s = RangeSet(4)
m.ds = RangeSet(2)
m.d = Disjunct(m.s)
m.djn = Disjunction(m.ds)
m.djn[1] = [m.d[1], m.d[2]]
m.djn[2] = [m.d[3], m.d[4]]
m.x = Var(bounds=(-2, 10))
m.d[1].c = Constraint(expr=m.x >= 2)
m.d[2].c = Constraint(expr=m.x >= 3)
m.d[3].c = Constraint(expr=m.x <= 8)
m.d[4].c = Constraint(expr=m.x == 2.5)
m.o = Objective(expr=m.x)
# Add the logical proposition
m.p = LogicalConstraint(
expr=m.d[1].indicator_var.implies(m.d[4].indicator_var))
# Note: the implicit XOR enforced by m.djn[1] and m.djn[2] still apply
# Apply the Big-M reformulation: It will convert the logical
# propositions to algebraic expressions.
TransformationFactory('gdp.bigm').apply_to(m)
# Before solve, Boolean vars have no value
Reference(m.d[:].indicator_var).display()
# Solve the reformulated model
run_data = SolverFactory('glpk').solve(m)
Reference(m.d[:].indicator_var).display()
从中我们学到了几件事。
如果出于某种原因,您需要手动进行 GDP 转换
IE Grossmann 和 JP Ruiz。广义析取编程:用于 MINLP 优化的公式和替代算法的框架。载于 J. Lee 和 S. Leyffer,编辑,混合整数非线性规划,第 93-115 页,纽约,纽约,2012 年。Springer 纽约。国际标准书号 978-1-4614-1927-3。
对 MINLP 变换有一个不错的解释,而对船体变换有一个不太容易理解的解释。