基于Matlab的非线性规划问题

1、题目

题目:
某集团拟在某市东、西、南、北建立4座超市,有10个候选位置Aj(j=1, 2, 3, … ,10),考虑到各地区的消费水平及居住密度,规定如下:
(1) 东区由A1, A2, A3三个点中之多选择两个。
(2) 西区由A4, A5两个点中至少选择一个。
(3) 南区由A6, A7两个点中至少选一个。
(4) 北区由A8, A9, A10三个点中至少选两个。

试题说明:

问题1:

A j A_{j} Aj各点的设备投资及每年可获利润由于地点不同而不一样,预测情况见表1(单位:万元),总投资额不能超过720万元,问应该选择哪几个位置建立超市,可使年利润最大?

表格1 A j A_{j} Aj各点投资与利润情况

项目A1A2A3A4A5A6A7A8A9A10
投资额10012015080109080140160180
利润35405022203025485861

问题2:

现在需要建立一个仓库给四个超市供货,为简化问题,假设仓库到每个超市是单独供货,即送完某个超市即返程,不再接着送下一个超市 (即仅考虑路程,不考虑图论),且从仓库到各超市的运费单价一致,问该仓库建立在何处才能使超市的运输成本最低?

表格 2 A j A_{j} Aj各点的位置情况

项目A1A2A3A4A5A6A7A8A9A10
x67-120721634910373-3029-79
y89-115-107-81-29414333-75137-171

2、解析

问题1:

该集团拟定东南西北四个方向建立四座超市,从候选的10个位置中又根据各地区的消费水平和居住密度设定了一系列规则,在满足规则的同时使超市收益的年利率最大,由此我们构建了一个优化方程,最终通过matlab中的非线性规划fmincon函数求解,得出最终结果 A = ( A 4 , A 6 , A 9 , A 10 ) A = ({A_4},{A_6},{A_9},{A_{10}}) A=(A4,A6,A9,A10)

根据规定:
(1) 东区由A1, A2, A3三个点中之多选择两个。
(2) 西区由A4, A5两个点中至少选择一个。
(3) 南区由A6, A7两个点中至少选一个。
(4) 北区由A8, A9, A10三个点中至少选两个。
可得规划方程:
{ A 1 + A 2 + A 3 ≤ 2 A 4 + A 5 ≥ 1 A 6 + A 7 ≥ 1 A 8 + A 9 + A 10 ≥ 2 \left\{ \begin{array}{l} {A_1} + {A_2} + {A_3} \le 2\\ {A_4} + {A_5} \ge 1\\ {A_6} + {A_7} \ge 1\\ {A_8} + {A_9} + {A_{10}} \ge 2 \end{array} \right. A1+A2+A32A4+A51A6+A71A8+A9+A102
A j A_{j} Aj各点的设备投资及每年可获利润由于地点不同而不一样,总投资额不能超过720万元,可得规划方程:
100 ∗ A 1 + 120 ∗ A 2 + 150 ∗ A 3 + 80 ∗ A 4 + 10 ∗ A 5 + 90 ∗ A 6 + ⋯ 80 ∗ A 7 + 140 ∗ A 8 + 160 ∗ A 9 + 180 ∗ A 10 ≤ 720 \begin{array}{l} 100*{A_1} + 120*{A_2} + 150*{A_3} + 80*{A_4} + 10*{A_5} + 90*{A_6} + \cdots \\ 80*{A_7} + 140*{A_8} + 160*{A_9} + 180*{A_{10}} \le 720 \end{array} 100A1+120A2+150A3+80A4+10A5+90A6+80A7+140A8+160A9+180A10720
要使年利润最大,则可得优化方程为:
max ⁡ ( 35 ∗ A 1 + 40 ∗ A 2 + 50 A 3 + 22 ∗ A 4 + 20 ∗ A 5 + ⋯ 30 ∗ A 6 + 25 ∗ A 7 + 48 ∗ A 8 + 58 ∗ A 9 + 61 ∗ A 10 ) \begin{array}{l} \max (35*{A_1} + 40*{A_2} + 50{A_3} + 22*{A_4} + 20*{A_5} + \cdots \\ 30*{A_6} + 25*{A_7} + 48*{A_8} + 58*{A_9} + 61*{A_{10}}) \end{array} max(35A1+40A2+50A3+22A4+20A5+30A6+25A7+48A8+58A9+61A10)
通过matlab中的fmincon函数求解该非线性规划方程(代码见3代码求解):输出结果
最终可得 A = ( A 4 , A 6 , A 9 , A 10 ) A = ({A_4},{A_6},{A_9},{A_{10}}) A=(A4,A6,A9,A10),且最大收益为 f v a l = 171.0 fval = 171.0 fval=171.0

问题2:

根据问题一中所得的四个超市坐标,选取配送成本最低的仓库坐标。考虑到本题中的超市是单独供货、送完即回,且运费单价一致,要使成本最低,只需要保证去往每个超市的路程的总和最小,则可以保证成本最低(这里假设每个超市配送的概率相同)。由此我们构建了路程的优化方程,使用与第一问相同的fmincon函数求解,得出最终结果 ( x , y ) = ( 105.5779 , 133.3760 ) (x,y) = (105.5779,133.3760) (x,y)=(105.5779,133.3760)

需要建立一个仓库给四个超市供货,由于是送完某个超市即返程,不再接着送下一个超市 (即仅考虑路程,不考虑图论),且从仓库到各超市的运费单价一致,所以该问题求解达到每个超市的最短距离问题,可转换成求送往各个超市的距离的和最小问题,于是构建优化方程:
min ⁡ ( ∑ i = 1 4 ( x − x i ) 2 + ( y − y i ) 2 ) \min (\sum\limits_{i = 1}^4 {\sqrt {{{(x - {x_i})}^2} + {{(y - {y_i})}^2}} } ) min(i=14(xxi)2+(yyi)2 )

通过matlab求解fmincon函数求解该非线性规划方程(代码见附页8.1.2):
输出结果
最终可得最优位置为 ( x , y ) = ( 105.5779 , 133.3760 ) (x,y) = (105.5779,133.3760) (x,y)=(105.5779,133.3760),各超市配送距离总和最小为 f v a l = 633.0362 fval = 633.0362 fval=633.0362

3、代码求解

问题1:

mycode1.m

% 优化方程
function f = mycode1(x)
f = -(35*x(1)+40*x(2)+50*x(3)+22*x(4)+20*x(5)+30*x(6)+25*x(7)+48*x(8)+58*x(9)+61*x(10));

work1.m

%% 非线性规划方程
% A1、A2...、A10
x0 = zeros(10,1);

% 对应方程12的左边
A = [1,1,1,1,1,1,1,1,1,1
    1,1,1,0,0,0,0,0,0,0
    0,0,0,-1,-1,0,0,0,0,0
    0,0,0,0,0,-1,-1,0,0,0
    0,0,0,0,0,0,0,-1,-1,-1
    100,120,150,80,10,90,80,140,160,180];
    
% 对应方程12的右边,注意fmincon是求小于,所以如果是大于的话就取负数就行(两边同时取负,不等式取反,基本常识)
b = [4;2;-1;-1;-2;720];

% 方程中的恒等关系,没有就像我这样取
Aeq = [];beq = [];

% x0的限制关系,0-1规划就需要取最小值为0,最大值为1
VLB = zeros(1,10);
VUB = ones(1,10);

% x为取值,fval为优化方程的最优解
[x, fval] = fmincon('mycode1',x0,A,b,Aeq,beq,VLB,VUB)

问题2:

mycode2.m

% 优化方程
function f = mycode2(x)

% 迭代的xi和yi
a = [163,103,129,-79];
b =  [-81,143,172,-171];
f1 = 0;

for i=1:4
    tmp = sqrt((x(1)-a(i))^2 + (x(2)-b(i))^2);
    f1 = tmp + f1;
end

f = f1;

work2.m

x0 = zeros(1,2);
A = [];
b = [];
Aeq = [];beq = [];
[x, fval] = fmincon('mycode2',x0,A,b,Aeq,beq)
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非线性规划问题可以使用Matlab的fmincon函数进行求解。下面是一个使用该函数求解非线性规划问题的示例代码: ```matlab clear f f = @(x) 100 * (x(2) - x(1)^2)^2 + (1 - x(1))^2; % 定义非线性目标函数 a = [1 -2]; b = [1]; % 线性约束条件的不等式系数矩阵 aeq = [2 1]; beq = [1]; % 线性约束条件的等式系数矩阵 [x, yval = fmincon(f, [0, 1], a, b, aeq, beq); % 非线性规划的全局范围最优解 ``` 在这个示例代码中,首先定义了一个非线性的目标函数f,然后定义了线性约束条件的不等式系数矩阵a和b,以及线性约束条件的等式系数矩阵aeq和beq。接下来使用fmincon函数进行求解,其中fmincon的第一个参数是目标函数,第二个参数是变量的初始值,后面的参数依次是线性约束条件的不等式系数矩阵、线性约束条件的不等式右边的值、线性约束条件的等式系数矩阵和等式右边的值。最后,求解结果保存在变量x和yval中,其中x是最优解的变量值,yval是最优解的目标函数值。 请注意,这只是一个简单的示例代码,具体问题非线性规划代码需要根据具体情况进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Matlab非线性规划问题(fmincon)](https://blog.csdn.net/m0_48038938/article/details/121254302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值