请问,如果matlab 优化当中, 目标函数 和 约束条件都很复杂,没有办法直接用x 表示出来,该怎么处理? 而且,对于要求出的x, 我有多个目标函数,这又该如何处理?
例如:
图像1, 图像2 ,图像3, 图像4,图像5 。。图像10 , 根据这10个图像,求最优解x ,目标是 :5个图像使用x(向量)作为权重叠加之后的图像中的叠加图像中的某个部分的值为优化目标。
主函数:imageVectorChild里面存了 10个图像的向量形式。
----------
x0=2*rand(1,size(imageVectorChild,2))-1; % 10个随机数作为参数x的初始值
options = optimoptions(@fmincon,'display','iter');
Aeq=ones(1,endPic-startPic+1); % 想说让x的和是1,作为约束,不过也可以不要这个约束
beq=1; %约束可以任意,不是重点
[x,resnorm] = fmincon(@objfun2,x0,[],[],Aeq,beq,[],[],[],options,imageVectorChild)
优化(目标)函数:objfun2.m
--------------
function Objval = objfun2(x,imageVectorChild)
finalImage = x * imageVectorChild; % 就是利用x系数,把10个图像简单的叠加在一起。相当于:x(1).*图像1+x(2).*图像2+x(3).*图像3+。。。
theta = direction(finalImage ) % 根据叠加结果,求得方向场角度theta, 这里面对finalImag进行了复杂的转化。所以x已经无法直接表示成为theta。同时,theta也是一个向量。
theta(1) = 0.24 % 优化目标
theta(2) = 0.38 % 优化目标
。。。
theta (m) = 0.42 % 优化目标
也就是说优化目标有多个,数量根据theta向量的维度决定。 同时,优化目标也不应该用等式表示,也不清楚该怎么表示。
例如: 如果优化目标就只有一个,可以用 Objval = theta(1) - 0.24 。
麻烦了解的同学 给些指导 真谢谢。