如果matlab 优化当中, 目标函数 和 约束条件都很复杂,没有办法直接用x 表示出来,该怎么处理?
请问,如果matlab优化当中,目标函数和约束条件都很复杂,没有办法直接用x表示出来,该怎么处理?而且,对于要求出的x,我有多个目标函数,这又该如何处理?例如:图像1,图...
请问,如果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 。 展开
例如:
图像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 。 展开
1个回答
展开全部
目标函数形式不是很重要,fmincon不需要知道目标函数的结果是怎么求出来的
只要是利用一个x未知向量输入,得到一个结果的函数就可以
你的约束条件好像也并不复杂,奇怪的是如果要权重x加起来是1
那么每个x分量的值应该是0~1之间的正数才是
而你给输入初始化x0的值是-1~1之间的随机数,所以这里比较奇怪
问题的关键就是多目标的问题
fmincon是只能寻找一个目标的,也就是目标函数只有一个返回值
如果要多目标优化,那么需要使用遗传算法或其它办法
但是多目标优化本来就是一个可能不能完全实现所有目标的优化结果
也就是说多个目标很多时候是无法同时达到的,和多时候只能得到离多个目标都比较近的结果
所以,多目标的优化一般会给帕累托解集
不过,也有简单一点的办法,因为很多时候,我们是知道鱼与熊掌是不能兼得的
我们要优化结果只是尽量靠近目标就可以了
对于有多目标的,很多时候我们需要的只是一个离所有目标都比较接近的解
例如最小二乘法意义的最优解
这个时候可以根据得到的theta,计算 theta(1) - 0.24,theta(2) - 0.38,........
等多个目标的平方和的开方,利用这个总的"距离"作为优化目标
如果得到的theta是向量,而多个目标o,o(1)=0.24,o(2)=0.38,.......
也可以表示为向量,那么最终的最小二乘目标函数就是 sqrt( sum((theta-o).^2))
也可以有其它非最小二成的目标例如绝对值和 sum(abs(theta-o))
也就是把多目标按照一定的策略变为1个目标,然后还是可简单的用fmincon解决问题
当然,如果目标很多,图像数据也很大,可能运行比较耗时间
只要是利用一个x未知向量输入,得到一个结果的函数就可以
你的约束条件好像也并不复杂,奇怪的是如果要权重x加起来是1
那么每个x分量的值应该是0~1之间的正数才是
而你给输入初始化x0的值是-1~1之间的随机数,所以这里比较奇怪
问题的关键就是多目标的问题
fmincon是只能寻找一个目标的,也就是目标函数只有一个返回值
如果要多目标优化,那么需要使用遗传算法或其它办法
但是多目标优化本来就是一个可能不能完全实现所有目标的优化结果
也就是说多个目标很多时候是无法同时达到的,和多时候只能得到离多个目标都比较近的结果
所以,多目标的优化一般会给帕累托解集
不过,也有简单一点的办法,因为很多时候,我们是知道鱼与熊掌是不能兼得的
我们要优化结果只是尽量靠近目标就可以了
对于有多目标的,很多时候我们需要的只是一个离所有目标都比较接近的解
例如最小二乘法意义的最优解
这个时候可以根据得到的theta,计算 theta(1) - 0.24,theta(2) - 0.38,........
等多个目标的平方和的开方,利用这个总的"距离"作为优化目标
如果得到的theta是向量,而多个目标o,o(1)=0.24,o(2)=0.38,.......
也可以表示为向量,那么最终的最小二乘目标函数就是 sqrt( sum((theta-o).^2))
也可以有其它非最小二成的目标例如绝对值和 sum(abs(theta-o))
也就是把多目标按照一定的策略变为1个目标,然后还是可简单的用fmincon解决问题
当然,如果目标很多,图像数据也很大,可能运行比较耗时间
追问
您解释的很好。 这个例子,我写的不是很好。 约束条件是为了让函数可以运行,我随便写的。 真正的约束条件您也可以认为是通过函数才能表示出来的。 这个该怎么办呢?
您有qq或者邮箱么, 我可以把整理后的更准确的问题发给您
追答
发私信看看
ZESTRON
2024-09-04 广告
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸...
点击进入详情页
本回答由ZESTRON提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询