1-理論知識
介紹




應用









2-基于matlab實現非線性規劃
?1)例1
% 清除工作臺和命令行
clear;clc;
x0=[0 0 0];
A = [-1 1 -1];
b = 0;
[x,value] = fmincon(@f1,x0,A,b,[],[],[],[],@nonlfun1)
function f = f1(x)f = x(1)^2+x(2)^2+x(3)^2+8;
end
function [c,ceq] = nonlfun1(x)c = [x(1)+x(2)^2+x(3)^2-20];ceq = [-x(1)-x(2)^2+2];
end

2)例2

% 清除工作臺和命令行
clear;clc;
x0=[0 0 0];
A = [-1 1 -1];
b = 0;
Aeq = [1 -1 0];
beq = 10;
lb = [10;-Inf;-Inf];
ub = [20;+Inf;+Inf];
[x,value] = fmincon(@f1,x0,A,b,Aeq,beq,lb,ub,@nonlfun1);
disp(['x = ' num2str(x)]);
disp(['value = ' num2str(-value)]);
function f = f1(x)f = -x(1)*x(2)*x(3);
end
function [c,ceq] = nonlfun1(x)c = [x(1)+x(2)^2+x(3)^2-20;x(1)*x(2)-x(3)-1];ceq = [-x(1)-x(2)^2+2];
end

3)怪獸入侵星球問題


%% 清除工作臺和命令行
clear;clc;
% 前6個變量為燕雙鷹,后6個變量為手撕俠
x0=zeros(1,12);%% 線性不等式約束
% 前6個變量為燕雙鷹在6個星球消滅的怪獸量
% 后6個變量為手撕俠在6個星球消滅的怪獸量
A = [ones(1,6),zeros(1,6);zeros(1,6),ones(1,6)];
b = [30;20];
%% 線性等式約束
% 把兩個六維單位矩陣作為元素拼在同一行
Aeq = [eye(6),eye(6)];
% 兩個人在同一星球消滅的怪獸量之和不超過該星球的怪獸量
beq = [5;9;4;8;14;11];%% 上下界約束
lb = zeros(1,12);
ub = repmat(+Inf,1,12);%% 求解
[x,value] = fmincon(@f1,x0,A,b,Aeq,beq,lb,ub,[]);
value = -value;
disp(['x = ' num2str(x)]);
disp(['value = ' num2str(-value)]);%% 局部函數
function f = f1(x)% 給的是一個行向量% 因計算習慣,把x變成列向量x = x';% 燕雙鷹和手撕俠的坐標x1 = 4;y1 = 1;x2 = 8;y2 = 9;% 燕雙鷹和手撕俠每消耗一個怪獸需要消耗的饃數p1 = 3;p2 = 1;% 燕雙鷹和手撕俠每百公里消耗的饃數k1 = 1;k2 = 3;% 各星球橫坐標a = [1.37 9.45 4.43 6.66 3.14 15.92];% 各星球縱坐標b = [10.21 9.45 8.88 5 16.44 18];% 表達式系數矩陣X = x ./ (1+x);% 目標函數,分三行寫以提高可讀性% % 兩人打怪獸消耗的饃數之和f = [repmat(p1,1,6),repmat(p2,1,6)]*x;% i=1,x1j/(1 + x1j) = X([1:6],:)f = f + sqrt(sum(([a;b] - repmat([x1;y1],1,6)) .^ 2)) .* repmat(k1,1,6) * X([1:6],:);% i=2,x2j/(1 + x2j) = X([7:12],:)f = f + sqrt(sum(([a;b] - repmat([x2;y2],1,6)) .^ 2)) .* repmat(k2,1,6) * X([7:12],:);
end

4)飛機碰撞問題