matlab求解非线性规划问题

一、无约束最优化问题

  • 无约束最优化模型:min f(x)
    函数调用:[x, fval] = fminsearch(fun, x0); [x, fval] = fminunc(fun,x0)
    其中,fun为函数方程,x0为初始值
  • 举例:f(x1, x2) = x1^2 + x2^2 - x1x2 - 2x1,求解函数方程的最小值
f=@(x)(3/2)*x(1)^2+(1/2)*x(2)^2-x(1)*x(2)-2*x(1);
 [x fval]=fminsearch(f,[-2,4])
 
f=@(x)(3/2)*x(1)^2+(1/2)*x(2)^2-x(1)*x(2)-2*x(1);
 [x fval]=fminunc(f,[-2,4])

二、约束最优化问题

  • 函数调用:[x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon)
    x得到决策变量取值,fval得到最优解取值
    fun:单独函数文件里定义的目标函数
    x0:决策变量的初始值
    A,b:线性约束的不等式变量系数矩阵和常数项矩阵(都是≤)
    Aeq,beq:线性约束的等式变量系数矩阵和常数项矩阵
    lb,ub:决策变量的最小取值和最大取值
    nonlcon:非线性约束,包括不等式和等式
  • 举例:min f(x) = x1^2 + x2^2 + x3^2 + 8
    约束条件:
    x1^2 - x2 + x3^2 ≥ 0;x1 + x2^2 + x3^3 ≤ 20;-x1 - x2^2 + 2 = 0;x2 + 2*x3^2 = 3;x1, x2, x3 ≥ 0
% 编写m文件fun1定义目标函数
function f=fun1(x)
f=x(1).^2+x(2).^2+x(3).^2+8;

% 编写m文件fun2定义非线性约束条件
function [g,h]=fun2(x)
g=[-x(1).^2+x(2)-x(3).^2;x(1)+x(2).^2+x(3).^3-20];
h=[-x(1)-x(2).^2+2;x(2)+2*x(3).^2-3];

% 编写主程序函数
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')

三、用蒙特卡罗方法求解优化模型

  • 用蒙特卡罗方法求解下列优化模型
    在这里插入图片描述
  • 使用蒙特卡罗法进行模拟,取N=1000,根据题目中对自变量的限制条件随机生成三个维度为1×1000的矩阵,之后对三个矩阵中的每一个随机数进行计算,首先设置最小值fmin为无穷大,当计算结果小于fmin时成为新的fmin。对每一个随机数,当满足题目中的不等关系时,代入函数表达式进行计算,通过这种方式遍历整个数组,最终找到最小值和取最小值时自变量的取值。
N = 1000;
x1 = unifrnd(0,15,N,1);
x2 = unifrnd(0,9,N,1);
x3 = unifrnd(0,25,N,1);
fmin = inf;
for i=1:N
    x = [x1(i), x2(i), x3(i)]; 
    if (3*x(1) + 2*x(2) + 6*x(3) <= 20) && (4*x(1) + 5*x(2) + 2*x(3) <= 21)    
        result = 2*(x(1) - 1)^2 + 3*(x(2) - 4)^2 + x(1)*x(2) + (2*x(3) - 5);
        if  result  < fmin 
            fmin = result; 
            X = x; 
        end
    end
end
disp(strcat('最小值为:',num2str(fmin)))
disp('最小值处自变量的取值为:')
disp(X)
  • 3
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值