Matlab建模—无约束优化与非线性规划相关算例

数学建模期末复习,撰写博客做总结之用,主要侧重于算例的模型建立与部分代码的实现,其中不足之处望读者多多指正。

前言

 主要复习的是两个问题的数学模型建立的过程,代码实现省略。

非线性规划问题

供应与选址

问题描述

某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表示,距离单位:km)及水泥日用量d(t)由下表给出.目前有两个临时料场位于A(5,1),B(2,7),日储量各有20t.假设从料场到工地之间均有直线道路相连.
(1)试制定每天的供应计划,即从A,B两料场分别向各工地运送多少水泥,可使总的吨千米数最小.
(2)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20t,问应建在何处,节省的吨千米数有多大?
在这里插入图片描述

模型建立

  • 符号说明
    工地的位置为( a i , b i a_i,b_i ai,bi),水泥的日用量 d i d_i di,i=1,2……,6;料场位置为( x j , y j x_j,y_j xj,yj),日储量为 e j e_j ej,j=1,2;料场j向工地i运送的水泥量为 X i j X_{ij} Xij.
  • 问题1模型建立
    目标: min ⁡ f = ∑ j = 1 2 ∑ i = 1 6 X i j ( x j − a i ) 2 + ( y j − b i ) 2 \min f = \sum\limits_{j = 1}^2 {\sum\limits_{i = 1}^6 { {X_{ij}}\sqrt { { {({x_j} - {a_i})}^2} + { {({y_j} - {b_i})}^2}} } } minf=j=12i=16Xij(xjai)2+(yjbi)2
    约束: ∑ j = 1 2 X i j = d i , i = 1 , 2 , ⋯   , 6 ∑ i = 1 6 X i j ≤ e j , j = 1 , 2 \begin{array}{l} \sum\limits_{j = 1}^2 { {X_{ij}}} = {d_i},{\rm{ }}i = 1,2, \cdots ,6\\ \sum\limits_{i = 1}^6 { {X_{ij}}} \le {e_j},{\rm{ }}j = 1,2 \end{array} j=12Xij=di,i=1,2,,6i=16Xijej,j=1,2
    此时使用临时料场的决策变量为: X i j X_{ij} Xij.
  • 问题2模型建立
    min ⁡ f = ∑ j = 1 2 ∑ i = 1 6 X i j ( x j − a i ) 2 + ( y j − b i ) 2 \min f = \sum\limits_{j = 1}^2 {\sum\limits_{i = 1}^6 { {X_{ij}}\sqrt { { {({x_j} - {a_i})}^2} + { {({y_j} - {b_i})}^2}} } } minf=j=12i=16Xij(xjai)2+(yjbi)2
     s.t.  ∑ j = 1 2 X i j = d i , i = 1 , 2 , ⋯   , 6 ∑ 6 X i j ≤ e j , j = 1 , 2 \begin{array}{l} \text { s.t. } \sum_{j=1}^{2} X_{i j}=d_{i}, \quad i=1,2, \cdots, 6 \\ \sum^{6} X_{i j} \leq e_{j}, \quad j=1,2 \end{array}  s.t. j=12Xij=di,i=1,2,,66Xijej,j=1,2
    此时不使用临时料场,决策变量变为: X i j 、 x j 、 y j X_{ij}、x_j、y_j Xijxjyj

无约束最优化

梯子长度问题

问题描述

一楼房的后面是一个很大的花园. 在花园中紧靠着楼房有一个温室, 高3m,温室伸入花园2m,温室正上方是楼房的窗台. 清洁工打扫窗台周围,他得用梯子越过温室,一头放在花园中,一头靠在楼房的墙上. 因为温室是不能承受梯子压力的,所以梯子太短是不行的.现清洁工只有一架7m长的梯子,你认为它能达到要求吗? 能满足要求的梯子的最小长度为多少?
在这里插入图片描述

模型建立

  • 符号假设
    L : 梯 子 的 长 度 L:梯子的长度 L:
    L 1 : 梯 子 的 上 半 段 L_1:梯子的上半段 L1:
    L 2 : 梯 子 的 下 半 段 L_2:梯子的下半段 L2:
    θ : 梯 子 与 地 面 的 夹 角 \theta:梯子与地面的夹角 θ:;

  • 模型建立
    据题意易得: L = L 1 + L 2 ( 1 ) ; L=L_1+L_2(1); L=L1+L2(1);
    其中:
    L 1 = a c o s ( θ ) ( 2 ) L_1=\frac{a}{cos(\theta)}(2) L1=cos(θ)a(2)
    L 2 = b s i n ( θ ) ( 3 ) L_2=\frac{b}{sin(\theta)}(3) L2=sin(θ)b(3)
    综合(1)、(2)、(3)式可得原式可等效为:
    m i n L = 2 c o s ( θ ) + 3 s i n ( θ ) 其 中 : 0 ≤ θ ≤ π 2 min L=\frac{2}{cos(\theta)}+\frac{3}{sin(\theta)}其中:0\leq\theta\leq\frac{\pi}{2} minL=cos(θ)2+sin(θ)30θ2π

  • 数学方式求:
    θ \theta θ求导令导数为零,其为零时可得对应的最值,再求对应的二阶导可判断其的取值情况。

  • Matlab求取:

%梯子问题
a=2;
b=3;
str=[num2str(a),'/cos(x)+',num2str(b),'/sin(x)'];
f=str2func(['@(x)',str])
ezplot(str,[0,pi/2])
[x,fmin]=fminsearch(f,1)

在这里插入图片描述

扫描二维码关注公众号,回复: 12451316 查看本文章

x =0.8527
fmin =7.0235
即梯子的最小长度为7.0235米。

水槽问题

问题描述

有边长为3m的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?

问题求解

  • 模型
    设裁剪的正方形的边长为 x x x,这水槽的容积为: ( 3 − 2 x ) 2 x (3-2x)^2x (32x)2x
    可建立无约束优化模型:min y = ( 3 − 2 x 2 ) x y=(3 - 2{x^2})x y=(32x2)x 0<x<1.5;
  • Matlab求解
%铁板问题
f='-(3-2*x).^2*x'
[x,fval]=fminbnd(f,0,1.5);
ezplot(f,[0,1.5])
  xmax=x
  fmax=-fval
  • 结果
    在这里插入图片描述

xmax =0.5000
fmax =2.0000
可得边长取0.5m取得最大容积 2 m 3 2m^3 2m3

猜你喜欢

转载自blog.csdn.net/Zengmeng1998/article/details/107140653