你如何解决这个优化约束?

时间:2015-08-11 05:23:37

标签: mathematical-optimization linear-programming

可以在http://i62.tinypic.com/24diqmr.jpg

找到问题的更漂亮的描述(用Latex编写)

以下是文字说明:

给出非负权重列表w[i](对于i = 1到d)。我们有以下功能:

F = (w[1].x[1] + w[2].x[2] + ... + w[d-1].x[d-1])/w[d]

已经提供了x[i] for i=1 to d,可能是否定的。

对于每个I,我们知道权重范围,例如,w[i] >= min[i]w[i] <= max[i],其中min[i]max[i]为每个i。

此外,我们知道所有权重之和为1,即w[1] + w[2] + ... + w[d] = 1

我们需要为每个i = 1到d找到w[i],以使F最小化。

我们如何解决这个问题?我是线性编程的新手,事实上,我不确定这是否是一个线性优化问题。

1 个答案:

答案 0 :(得分:0)

如上所述,您没有线性编程问题,因为您在目标中除以一个决策变量SQL。但是,由于只有一个麻烦的变量,我们不必太努力地获得线性程序。

暂时考虑将w[d]固定为某个常量w[d]。然后,c的最佳值可以通过最小化F(w[1].x[1] + w[2].x[2] + ... + w[d-1].x[d-1]) / c变量的所有边界约束并受约束w[i]的约束来获得。由于w[1] + w[2] + ... + w[d-1] = 1-c是常数,因此这是一个线性编程问题,可以使用标准线性编程软件解决。让我们调用此模型c的目标值。

剩下的就是确定满足F(c)的{​​{1}}值,以使c最小化。这是一个可以用line search algorithms解决的一维优化问题;您最喜欢的编程语言可能已经实现了经典的线搜索算法,如果没有,您应该能够自己实现一个而不会有太多麻烦。

总而言之,您可以通过执行线搜索解决您的问题,为每个函数评估解决线性编程问题。