Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:fmincon和不等式约束(实现问题)_Matlab_Optimization_Constraints - Fatal编程技术网

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

Matlab:fmincon和不等式约束(实现问题),matlab,optimization,constraints,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文件

我正在用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

你知道怎么解决这个问题吗?
再次感谢

我不认为你的函数在某个点上不会计算这个值(当I=1和j=4时)。主要的问题似乎是函数不返回任何内容,或者接受
x
。根据,约束函数应返回两件事:

非线性约束函数必须同时返回c和ceq 不等式和等式约束函数,即使它们不同时存在 存在。对于不存在的约束,返回空[]

因此,首先,我们需要确保将约束保存到输出向量
c
,返回
c
和空
ceq
,并且我们的函数同时接受
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

下一个问题:此函数接受两个输入,但作为
fmincon
的输入,
x
只需要接受一个。我们通过将此函数包装为匿名函数(
n
需要预定义)来解决此问题,因此在实际的
fmincon
调用中,您可以将其设置为类似
@(x)约束(x,n)

谢谢您的回答,但如何解决y和θ的问题?我的意思是:θ需要最大化,x和y是未知向量。所以你必须输入@(x,y,θ)?(对于初学者的问题,我真的很抱歉,但我从未接受过任何matlab培训)