精华内容
下载资源
问答
  • 2021-04-20 11:08:08

    请问,如果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  。

    麻烦了解的同学 给些指导  真谢谢。

    更多相关内容
  • matlab遗传算法求多目标函数有无约束条件的最优解项目
  • MATLAB】求解约束条件下的最值(fmincon用法解析) 简介 Matlab函数fmincon用来求最小约束非线性多变量函数,是一个非线性编程求解器,算出指定的问题的最小值。 其约束分为五种,作为fmincon的输入参数,分别是...

    一、简介

    Matlab 的函数 fmincon 用来求最小约束非线性多变量函数,是一个非线性编程求解器,算出指定的问题的最小值。

    注: fmincon 同样可以用来求约束条件下的最大值,主要将目标函数取反(前面加一个负号)即可。

    二、fmincon()的基本形式与参数

    [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

    输入参数:

    1. fun 是目标函数,注意需要单引号,或者@,(即写为符号函数);
    2. x0函数fun参数值的初始化;
    3. 参数值的线性不等式约束 A, b;(A * x <= b)
    4. 参数值的等式线性约束 Aeq, beq; (Aeq * x = beq)
    5. 参数值的上界和下界 lb, ub
    6. 使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。
    7. 非线性约束nonlcon,其参数值一般为约束函数。如果没有非线性不等式或等式约束,请设置 nonlcon = []。

    输出参数:

    1. X 输出最优参数值
    2. Fval 输出 fun 在X参数的值
    3. Exitflag 输出fmincon额外条件值

    fmincon 求解函数的基本形式:

    在这里插入图片描述

    三、约束条件类型与参数写法

    约束条件下的函数极值有是三种情况
    (1)线性不等式约束;
    (2)线性等式约束;
    (3)非线性不等式和等式约束;

    1.线性不等式约束(参数写法)

    线性不等式约束条件如下:

    在这里插入图片描述
    将不等式化为矩阵形式:

    在这里插入图片描述

    fmincon函数的参数可以确定为:

    A = [1,2; 3,4; 5,6]; 
    b = [10; 20; 30];
    

    2.线性等式约束(参数写法)

    线性等式约束条件如下:
    在这里插入图片描述
    同理转换为矩阵后,可知约束参数为:

    Aeq = [1,2,3; 2,4,1]; 
    beq = [10; 20];
    

    3.非线性约束(参数写法)

    在这里插入图片描述
    非线性约束条件如下:
    在这里插入图片描述

    确认为参数时,需要设置为函数形式、。

    function [c,ceq]=mycon(x)
    c=-x(1)^2+x(2);  %此处不要忘记将不等式改成不等式<=0的标准形式
    ceq=-x(1)-x(2)^2+2;
    

    注:函数调用时,nonlcon 参数值为 ‘函数名’

    四、例题

    (1)线性不等式约束下求最值示例

    以上是关于求目标函数

    f = 100 ∗ ( x 2 − x 1 ) 2 + ( 1 − x 1 ) 2 f=100 *(x_2-x_1)^2+(1-x_1)^2 f=100x2x12+(1x1)2

    在线性约束 x 1 + 2 x 2 ≤ 1 x_1+2x_2\le1 x1+2x21 条件下的最小值,结果如下:

    目标函数:

    function f = fminx(x)
        f = 100 * (x(2) - x(1)).^2 + (1-x(1)).^2;
    end
    

    fmincon函数的使用:

    [x,fval,exitflag] = fmincon(@(x) fminx(x),[0,0],[1,2],[1])
    

    结果:

    x =
    
        0.3363    0.3319
    
    
    fval =
    
        0.4425
    
    
    exitflag =
    
         1
    

    注:结果含义为 在 x 1 = 0.3363 , x 2 = 0.3319 时 , 取 最 小 值 : y = 0.4425 x_1=0.3363, x_2=0.3319时,取最小值:y=0.4425 x1=0.3363,x2=0.3319y=0.4425

    (2)线性不等式和等式约束条件下求最值示例

    目标函数: f = 100 ∗ ( x 2 − x 1 ) 2 + ( 1 − x 1 ) 2 f=100 *(x_2-x_1)^2+(1-x_1)^2 f=100x2x12+(1x1)2
    约束条件:

    在这里插入图片描述

    这次使用目标函数为匿名函数的方式,一步到位:

    fun=@(x)100*(x(2)-x(1))^2+(1-x(1))^2;
    x0=[0,0];
    A=[1,2];
    b=10;
    Aeq=[3,4];
    beq=20;
    [x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq)
    

    结果为:

    x =
    
        2.8511    2.8617
    
    
    fval =
    
        3.4378
    
    
    exitflag =
    
         1
    

    (3)非线性约束下求最值示例

    上面两题只有目标函数是非线性的,如果其约束条件也是非线性的,我们又该怎么办呢?

    示例1:

    在这里插入图片描述

    目标函数求值代码:

    fun=@(x)x(1)^2+x(2)^2+12;
    x0=rand(2,1);
    A=[];   
    Aeq=[];
    b=[];
    beq=[];
    lb=[0,0];
    ub=[];
    exitflag=1;
    [x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,'mycon')
    

    非线性约束条件:

    function [c,ceq]=mycon(x)
    c=x(1)^2+2*x(2); 
    ceq=5*x(1)-4*x(2)^2-20;
    

    结果为:

    x =
    
        1.2471
        0.0000
    
    
    fval =
    
       13.5552
    
    
    exitflag =
    
        -2
    

    示例2:

    目标函数为: f u n = 100 ∗ ( x 2 − x 1 ) 2 + ( 1 − x 1 ) 2 fun = 100*(x_2-x_1)^2 +(1-x_1)^2 fun=100(x2x1)2+(1x1)2

    约束条件:在以 ( 1 / 3 , 1 / 3 ) (1/3,1/3) 1/31/3为圆心,1/3 为半径, 0 ≤ x 1 ≤ 0.5 , 0.2 ≤ x 2 ≤ 0.8 0 ≤ x _1 ≤ 0.5 , 0.2≤x_2≤0.8 0x10.50.2x20.8 的边界约束

    function f=fun1(x)
    f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;
    end
    
    function [g,h]=fun2(x)
    g=(x(1)-1/3)^2+(x(2)-1/3)^2-1/9;
    h=[];
    end
    
    [x,y]=fmincon('fun1',[1/3,1/3],[],[],[],[],lb,ub,'fun2')
    

    结果如下:

    x =
        0.5000    0.2500
    y =
        0.2500
    

    五、总结

    非线性规划求最值的fmincon函数其实和线性规划的improg大同小异,关键是对非线性约束条件的把握,即nonlcon,以及option(一般情况下我们不用管,默认值就可以了,有需求具体查阅使用即可)。

    参考博客|:

    https://blog.csdn.net/qq_52753078/article/details/121244164

    https://blog.csdn.net/qq_36932020/article/details/98670486

    展开全文
  • 问题描述:用matlab求解一个优化问题(目标函数非线性,约束函数线性)min f(x)=12*x(1)+21*x(2)+21*x(3)+13*x(4)+20*x(5)+23*x(6)+15*x(7)+17*x(8)+27*x(9)+17*x(10)+19*x(11)+31*x(12)+200*[(x(1)+x(2)+x(3))^0.6+(x...

    问题描述:

    用matlab求解一个优化问题(目标函数非线性,约束函数线性)

    min f(x)=12*x(1)+21*x(2)+21*x(3)+13*x(4)+20*x(5)+23*x(6)+15*x(7)+17*x(8)+27*x(9)+17*x(10)+19*x(11)+31*x(12)+200*[(x(1)+x(2)+x(3))^0.6+(x(4)+x(5)+x(6))^0.6+(x(7)+x(8)+x(9))^0.6+(x(10)+x(11)+x(12))^0.6]

    s.t. x(1)+x(2)+x(3)=0;

    我是这样求的:

    目标函数(运行显示下标不对)

    function f=myobj(x)

    c = [12 21 21; 13 20 23; 15 17 27; 17 19 31];

    size(x) = [4,3];

    y = c.*x;

    y = sum(y(:));

    s = 0;

    for i = 1:4

    sg = sum(x(i,:));

    s = s+sg^0.6;

    end

    f = y+200*s;

    command window

    A= [1,1,1,0,0,0,0,0,0,0,0,0;

    0,0,0,1,1,1,0,0,0,0,0,0;

    0,0,0,0,0,0,1,1,1,0,0,0;

    0,0,0,0,0,0,0,0,0,1,1,1;

    -1,0,0,-1,0,0,-1,0,0,-1,0,0;

    0,-1,0,0,-1,0,0,-1,0,0,-1,0;

    0,0,-1,0,0,-1,0,0,-1,0,0,-1]

    b=[200-1.645*10;

    300-1.645*10;

    400-1.645*10;

    200-1.645*10;

    -100-1.645*10;

    -300-1.645*10;

    -400-1.645*10]

    x0=[0,0,0,0,0,0,0,0,0,0,0,0];

    lb=[0,0,0,0,0,0,0,0,0,0,0,0];

    ub=[];

    [X,FVAL]=fmincon(@myobj,x0,A,b,[],[],lb,ub)

    运行显示:

    Warning: Large-scale (trust region) method does not currently solve this type of problem,

    switching to medium-scale (line search).

    > In fmincon at 260

    ? Error using ==> fmincon

    FMINCON cannot continue because user supplied objective function failed with the following error:

    Subscript indices must either be real positive integers or logicals.

    请热心人士帮忙看下怎么改?谢谢!

    fval不可能是0.我觉得求出来的x是1*12矩阵,需转换为4*3矩阵,代到目标函数中算才有结果,但我不知道怎么转换。

    1个回答

    分类:

    英语

    2014-09-21

    问题解答:

    我来补答

    程序编的非常好,只有一句:size(x) = [4,3]改为x =zeros(4,3) 即可.

    %

    运行结果:

    X =

    19.5167 69.5167 94.5167 38.7083 88.7083 113.7083 38.7083 88.7083 113.7083 19.5167 69.5167 94.5167

    FVAL =

    0

    EXITFLAG =

    1

    展开全文阅读

    展开全文
  • 3、遗传算法界面有一部分是输入约束条件的,根据题目输入对应的参数即可。4、在命令行窗口将以上矩阵用变量代替,则在工具箱中直接输入变量即可。5、最后将已经定义好的参数,直接输入在对应的位置即可,首先回答你...

    1、首先打开2113matlab软件,在“APP(应用)”5261选项卡4102中选择“Optimization(优化)1653”工具箱版。2、在优化工具箱中选择遗权传算法,图中标出的选项。3、遗传算法界面有一部分是输入约束条件的,根据题目输入对应的参数即可。4、在命令行窗口将以上矩阵用变量代替,则在工具箱中直接输入变量即可。5、最后将已经定义好的参数,直接输入在对应的位置即可,首先回答你第一个问题:怎么加入变量的约束条件?打开遗传算法工具箱的窗体中会有下图32313133353236313431303231363533e59b9ee7ad9431333433633435所示的选项,即是约束条件的编辑至于添加的方式,这里要重点的提一下,首先将问题抽象成规划问题的标准形式(如果你不懂什么是标准形式的话,建议你去翻阅运筹学那本书,上告诉你什么是标准形式),然后用矩阵语言写出来,最后将矩阵的系数填写到线性不等约束和线性相等约束中,同时定义所求变量x的上界和下界(记住有多少个变量就有多少列,如果你发现有些条件中没有出现某些变量,那么就应该用0补足,这个是matlab解决规划问题与lingo想比较麻烦的一个地方,)。然后回答你第二个问题:可否在m文件中添加约束条件?当然可以,界面的东西是为了方便不熟悉matlab编程的人而设计出来的,但是其底层的算法和接口肯定是有的。 碰到不懂的函数,请记得:help 函数名help ga 之后会得到一下一些函数gafind minimum of function using genetic algorithm //这个是定义syntax // 这个是语法也即是调用的规则x = ga(fitnessfcn,nvars)x = ga(fitnessfcn,nvars,a,b)x = ga(fitnessfcn,nvars,a,b,aeq,beq)x = ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub)x = ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub,nonlcon)x = ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub,nonlcon,options)x = ga(problem)[x,fval] = ga(...)[x,fval,exitflag] = ga(...) 直接给你将最长的那个吧x = ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub,nonlcon,options) x是返回所求的解fitnessfcn是适应度函数nvars是适应度函数中所含变量的维数a是不等式约束中变量的系数矩阵,b是不等式约束中不含变量的值矩阵aeq是等式约束中变量的系数矩阵,beq是等式约束中不含变量的值矩阵lb是下界,ub是上界nonlcon 是非线性约束条件至于options嘛 我也木有用过,其实你也可以不用管的。懂了木有呢,亲?,1、一来般有两种方法,一种是在生源成初始2113种群时只生成满足约5261束的个体;另一种是4102随机产生1653个体,并且在随后的操作中判断个体是否满足约束条件。2、这是遗传算法的特点决定的;遗传算法是一种随机搜索算法,每次都因种群规模的不同、参数的不同而得到不同的结果。即便参数都相同,每次运算得到的近似最优解也不一定相同。一般取n次运算中的最好结果来作为最终的最优解。当然,如果你的约束条件设置不妥,或者参数设置不适当,那么也会造成每次运算的近似最优解相差过大,且质量不高。这些都要注意。3、我用MATLAB自己编写遗传算法来解决问题,因为其自带的工具箱比较固定,只能解决简单、典型的问题。但你的问题稍加复杂时,工具箱的作用就发挥不出来。本回答被提问者和网友采纳,简单介绍一下复思路:最重要的制是确定适bai应度函数,只要确定这du个函zhi数就很容易了,就用你不会编dao程,直接调用matlab的工具箱就行了。1st.设置种群规模,并初始化种群p,并计算各个个体的适应度。例如,20个个体,每个个体包含5个变量,x1,x2,x3,x4,x5.如果你用matlab来编程的话,这个可以很容易实现,会用到random('unif',a,b)这个函数吧。例如x1的取值范围是[0,1],那么x1=random('unif',0,1)www.mh456.com防采集。

    首先回答你第一个问题:怎么加入变量的约束条件?

    打开遗传算法工具箱32313133353236313431303231363533e4b893e5b19e31333332396231的窗体中会有下图所示的选项,即是约束条件的编辑

    95d58416e94013c707e56bdc9f454847.png

    至于添加的方式,这里要重点的提一下,首先将问题抽象成规划问题的标准形式(如果你不懂什么是标准形式的话,建议你去翻阅运筹学那本书,上告诉你什么是标准形式),然后用矩阵语言写出来,最后将矩阵的系数填写到线性不等约束和线性相等约束中,同时定义所求变量x的上界和下界(记住有多少个变量就有多少列,如果你发现有些条件中没有出现某些变量,那么就应该用0补足,这个是matlab解决规划问题与lingo想比较麻烦的一个地方,)。

    然后回答你第二个问题:可否在M文件中添加约束条件?

    当然可以,界面的东西是为了方便不熟悉matlab编程的人而设计出来的,但是其底层的算法和接口肯定是有的。

    碰到不懂的函数,请记得:help 函数名

    help ga 之后会得到一下一些函数

    ga

    Find minimum of function using genetic algorithm  //这个是定义

    Syntax  // 这个是语法也即是调用的规则

    x = ga(fitnessfcn,nvars)

    x = ga(fitnessfcn,nvars,A,b)

    x = ga(fitnessfcn,nvars,A,b,Aeq,beq)

    x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)

    x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon)

    x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)

    x = ga(problem)

    [x,fval] = ga(...)[x,fval,exitflag] = ga(...)

    直接给你将最长的那个吧

    x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)

    X是返回所求的解

    fitnessfcn是适应度函数

    nvars是适应度函数中所含变量的维数

    A是不等式约束中变量的系数矩阵,b是不等式约束中不含变量的值矩阵

    Aeq是等式约束中变量的系数矩阵,beq是等式约束中不含变量的值矩阵

    LB是下界,UB是上界

    nonlcon 是非线性约束条件

    至于options嘛  我也木有用过,其实你也可以不用管的。

    懂了木有呢,亲?

    内容来自www.mh456.com请勿采集。

    展开全文
  • matlab中,对于求解无约束目标函数求解问题,可以使用遗传算法。实例的求解问题是maxf(x)=200exp(-0.05x)sin(x),x属于[-2,2].
  • 针对带有约束条件的多目标函数,进行多目标参数优化
  • 基于matlab遗传算法求多目标函数有无约束条件的最优解
  • 而所谓“优化”,就是对于一个目标函数,在给定一些等式或不等式的约束后,求极值的过程。高中学的“线性规划”,就是一种简单的优化问题。 现在我们来看,如何将相对复杂一点的“二次规划问题”(Quadratic ...
  • 解 设需要一级和二级检验员的人数分别为x1、x2人, 则应付检验员的工资为: 因检验员错检而造成的损失为: 故目标函数为: 约束条件为: 线性规划模型: 解答 返 回 用MATLAB优化工具箱解线性规划 min z=cX 1、模型...
  • 可运行的NSGA-2优化算法,可自由设置目标函数约束函数,作者几乎在每行代码后面加入了中文注解,以便使用者更好的理解算法原理。
  • % 输入参数为: % -func: 目标函数的最小化句柄%-numInd:这是群体元素的数量% -range: 必须创建元素的范围% -n_var: 函数变量的个数% -tolerance:它是群体停止标准的容忍度% 半径%-numIter:这是最大迭代次数%...
  • 目标函数,在多个约束条件的情况下用遗传算法找出最优解 matlab源程序 可供参考
  • matlab求有约束条件函数的极值

    万次阅读 2017-04-22 21:54:07
    matlab求有约束条件函数的极值机房里的R2010a版本命令:1、fmincon FMINCON finds a constrained minimum of a function of several variables. 2、fmincon用法: X = FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,...
  • 看了仁兄的帖子 深受启发 万分感谢按照您的方法 我编写了...%输入x(1) x(2) x(3) x(4) x(5)的初始值[x,f]=fmincon(@objfun0,x0,[],[],[],[],[],[],@confun0)第二个M文件 目标函数function f=objfun0(x)b=66.47*pi/1...
  • 目标函数1 约束条件:1 2 3(约束条件3个) 目标函数2 约束条件:1 2 3 目标函数1(约束条件里面包括了目标函数1)
  • 目标函数是:minF=(3.14*64^2*x1*x3*272.27)/x2*7.1675*10^4+0.55*x2*x1^(-1.5)边界约束条件:x1=0.5:0.05:0.8 x2=0.0002:0.00005:0.001 x3=0.02:0.005:0.065函数约束条件:9.6<55*(2600*(64^3)*x3*x1^2))/(7....
  • MATLAB目标约束优化求解

    千次阅读 2021-04-23 16:51:10
    MATLAB目标约束优化求解该极值问题可以考虑fmincon(解,也可以用ga()求解(遗传算法)于给出的目数 F 缺具y1(x1,x2,x3)、y2(x1,x2,x3)、y3(x1,x2,x3)的表达式。所以无法帮助你。matlab中优化问题,关于不等式约束...
  • 此代码用于处理带约束的单目标优化问题,采用matlab编程。对于代码的使用,在工作窗口首先输入种群数(通常采用50-100),迭代次数1000以上,type指的是函数文件夹ConFitness_1对应的类型,测不同的type时,把之前的...
  • 主要内容包括:粒子群算法(PSO)基本概念与算法流程,粒子群算法利用MATLAB程序分析数模信号,粒子群算法6个构成要素及其选择经验,惯性权重改进方法及3个PSO算法对比分析,测试函数分析粒子群算法的搜索性能,粒子群...
  • matlab求解约束条件下的最值

    千次阅读 2020-04-11 19:50:50
    1. 题目 2. 求解 把 w1, w2 看做 x 的一部分。 function y= findOpt(x) y = fmincon(@(x) fminx(x),[0,0,0,0,0],[],[],[],[],[-...0 end 上面函数保存 findOpt.m,然后运行 findOpt([0,0,0,0,0]). 参考: matlab csdn;
  • 目标函数 function y=Optimin(x) y=0.06375*(27.78/pi/x(1)/x(5))^2+0.06375*(27.78/pi/x(1)/x(5)/sin(x(3)))^2+0.085*((1-16*pi^2*x(2)*sin(x(4))/12/(16*pi*x(2)-27.78/pi/x(2)/x(6)/tan(x(4))))^2*(16*pi*x(2)-...
  • 小弟写的源代码如下: clc; close; clear all; tic warning off NIND=35;... 问题2:为啥我在子函数力写的这些约束条件压根儿没起到任何作用呢??难道是&符号的问题?可是我放| 并不行,求帮助!!!
  • 最优化、罚函数、fminsearch
  • 惩罚函数法就可以将约束优化问题转化为无约束优化问题,从而使用无约束优化算法。约束优化问题大致分为三类:等式约束、不等式约束、等式+不等式约束。其数学模型为:等式约束s.t不等式约束s.t等式+不等式约束问题s....
  • matlab已知约束条件求自变量范围

    千次阅读 2021-04-24 15:25:09
    题主给出的问题是G=Σcos(x+i*b)≤1.5,且G的方差最小时的n、b值。...即 min G建立目标函数的关键是,使用for循环语句求解G(i)=Σcos(x+i*b),然后用var函数求出G(i)的方差第二步:根据G≤1.5条件...
  • Matlab约束优化

    2021-02-15 09:34:15
    约束优化
  • 1stOpt到时很容易:LoopConstant x=[0:4:400];PlotLoopData x[x], p;Functionp=atan((10*y+2.4448e-04*y)/(-y*(x-101.4)/0.1+3*(6.2723e+07)*(y^3)/(8*101.4)+y*(101.4^2)/(2*(101.4^2+25))));(10*y+2.4448e-04*y)^2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,947
精华内容 2,378
关键字:

matlab目标函数约束条件

matlab 订阅
友情链接: anycode-outru2.zip