一、无约束最优化问题
- 无约束最优化模型: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)