Matlab:fmincon和不等式约束(实现问题)

时间:2014-12-13 15:54:09

标签: matlab optimization constraints

我正在研究Matlab中的优化问题,但不幸的是,我被困住了。 我想使用函数fmincon最大化\ theta,但是这个特殊问题取决于$ n $,$ n $可以变得非常大。有$ n-1 $不等式约束,所有约束都用以下关系定义:

For all i \neq j \leq n : \theta - (x_i - x_j)^2 - (y_i - y_j)^2 \leq 0. 

所以$ c(x)$是一个(n-1)x1 - 向量。

我正在寻找实现此方法的方法,因此我不必为每个不同的$ n $编写新的matlab文件。 (正如你可以想象的那样,当n变大时,那将是一个工作)

任何帮助都会非常感激。 干杯!

编辑:我现在已经创建了一个额外的m.file,仅用于此约束:

function constraint(n)
%this is a function which creates the constraints of the distance. 

for i= 1: n
    for j= 1:n
        if j==i
            continue;
        end
    (x(i)-x(j))^2 + (y(i)-y(j))^2;
    end
end 

但现在的问题是matlab逐个遍历这些元素。例如:它不计算(x(1) - x(4))^ 2 +(y(1) - y(4))^ 2。

关于如何解决这个问题的任何想法? 再次感谢!

1 个答案:

答案 0 :(得分:0)

我没有看到你的功能在某些时候不会计算出这个值(当i = 1且j = 4时)。主要问题似乎是您的函数没有返回任何内容,或接受x。根据{{​​3}},约束函数应该返回两件事:

  

非线性约束函数必须同时返回c和ceq   不平等和平等约束函数,即使它们不兼而有之   存在。返回空[]表示不存在的约束。

首先,我们需要确保将约束保存到输出向量c中,返回c并返回空ceq,并且我们的函数同时采用{ {1}}和x。可能有更漂亮的方法,但

n

下一个问题:此函数需要两个输入,但function [c, ceq] = constraint(x,n) %this is a function which creates the constraints of the distance. counter = 1; for i= 1: n for j= 1:n if j==i continue; end c(counter)=(x(i)-x(j))^2 + (y(i)-y(j))^2; c = c+1; end end ceq = []; end 作为nonlcon的输入只需要一个fmincon。我们通过将此函数包装在匿名函数中来解决此问题(x需要预定义),因此在实际的n调用中,您将其设置为fmincon

相关问题