【问题标题】:Is this a unconstrained multivariable optimization problem, and best way to solve?这是一个无约束的多变量优化问题,是解决的最佳方法吗?
【发布时间】:2021-05-09 22:07:15
【问题描述】:

我有一个如下所示的数据集:

x1 x2 ... xn y1 y2 ... yn z1 z2 ... zn
50 40 3 80 -0.9 0.1 0.9 -0.3 0 0.5 0.9 0.8
20 10 8 20 -0.1 -0.5 0.8 -0.2 0.1 0.4 0.3 0.1

如您所见,集合中每个“类别”的数据都有不同的范围:

0 <= x <= 100
-1 <= y <= 1
0 <= z <= 1

我希望能够做到以下几点:

  1. 选择一组数据行及其权重,以最大化或最小化跨 x、y、z 的一个或多个变量
  2. 能够对一个或多个变量指定约束以选择一组数据行及其权重。例如。选择最佳行进行优化 20

我希望能够在 Python 中做到这一点,但感觉这与问题无关,因为理解使这项工作能够发挥作用的优化算法对我来说更重要。

感谢您的帮助!

【问题讨论】:

  • 你能澄清一下有什么需要优化的吗?这看起来像迭代每一行,检查约束(如果不可行则删除行),评估最小/最大 IFF 可行行,选择最佳行(也就是新的可行候选者比目前知道的更好吗?替换最佳候选者)。那么基本上是带有修剪的线性搜索?
  • 对不起,我没有理解那个数据集。你有 3 个维度 (x,y,z)? x_n,y_n,z_n 是什么?它就像 3D 空间中的曲线?
  • @sascha 道歉 - 我措辞错误。它应该说“一组数据行及其权重”。我更新了问题。

标签: python mathematical-optimization


【解决方案1】:

并不是一个完整的答案,但这就是我开始寻找解决这个问题的模型的方式。

我将从引入决策变量开始:

s(i) = 1 if row i is selected
       0 otherwise

w(i) ≥ 0 weight of row i  (not sure about the role of the weights)

目标可能如下所示:

min/max sum( (i,j)|j∈C, s(i)*w(i)*a(i,j) )

在这里,我们可以对所有列的子集求和。 a(i,j) 是我们的数据矩阵。

约束可能如下所示:

s(i)*20 ≤ s(i)*a(i,'x2') ≤ s(i)*40 
s(i)*(-.1) ≤ s(i)*a(i,'y') ≤ s(i)*.4 

这可以通过混合整数规划求解器来解决(只要我们保持线性)。目标现在看起来是二次的 (s(i)*w(i)) 但可以线性化,或者我们可以使用非凸 MIQP 求解器。

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2011-11-23
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多