Matlab:fmincon和不等式约束(实现问题)
我正在用Matlab处理一个优化问题,但不幸的是,我被卡住了。 我想使用函数fmincon最大化\theta,但这个特殊问题取决于$n$,而$n$可能会变得非常大。存在$n-1$不平等约束,所有约束均通过关系定义: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文件
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培训)