图论+线性规划建模——蔬菜供应方案

这篇具有很好参考价值的文章主要介绍了图论+线性规划建模——蔬菜供应方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录一下学校训练的一道建模题目

1问题描述

江平市是一个人口不到20万人的小城市。根据该市的蔬菜种植情况,分别在菜市场(A),城乡路口(B)和南街口(C)设三个收购点,再由各收购点分送到全市的8个菜市场,该市道路情况,各路段距离(单位:100m)及各收购点,菜市场①到⑧的具体位置见下图。
2016年数学建模蔬菜供应链方案设计,# 力扣,图论,算法
按常年情况,A、B、C三个收购点每天收购量分别为250,200和180(单位:100 kg),各菜市场的每天需求量及发生供应短缺时带来的损失(元/100kg)见表1。
2016年数学建模蔬菜供应链方案设计,# 力扣,图论,算法
设从收购点至各菜市场蔬菜调运费为2元/(100kg.100m)。试解决以下问题:

  1. 为该市设计一个从收购点至个菜市场的定点供应方案,使用于蔬菜调运及预期的短缺损失为最小;
  2. 若规定各菜市场短缺量一律不超过需求量的25%,重新设计定点供应方案;
  3. 为满足城市居民的蔬菜供应,该市的领导规划增加蔬菜种植面积,试问增产的蔬菜每天应分别向A、B、C三个采购点供应多少最经济合理。

2问题分析

问题一分析

问题一的建模目的是设计一个从收购点至菜市场的定点供应方案,使用于蔬菜调运及预期的短缺损失为最小。首先,问题给出了3个收购点,每天的收购量分别为250,200和180(单位:100 kg)。其次,问题给出了8个菜市场,从收购点到菜市场的蔬菜调运费为2元/(100kg.100m),每一个收购点到菜市场都有多条可供选择的运输路线,为了使蔬菜调运的损失最小,我们需要设计一个最佳的调运方案。最后,问题给出了8个菜市场每天的需求量和发生供应短缺时带来的损失,为了使供应短缺损失最小,我们需要设计一个最佳的供应方案。

因此,在设计蔬菜供应方案时,要分成两个子问题考虑。

  1. 最小调运损失:蔬菜要从3个收购点调运到8个菜市场,路段距离已经给出。可以很容易地想出,由于调运费是统一的2元,所以3个收购点到8个菜市场的24条最短路径就是最佳调运方案,可知最小调运损失=最短路径×调运数量×调运费。其中只有调运数量是未知的。
  2. 最小短缺损失:8个菜市场每天的总需求为700,而3个收购点每天的总收购量才630,这就意味着必然会发生短缺。可知最小短缺损失=短缺数量×单位短缺损失。其中只有短缺数量是未知的,而短缺数量=需求量-调运数量,所以最终问题依旧是求解调运数量。

因此最小总损失=最小调运损失+最小短缺损失。我们的目的就是通过建立模型求得最短路径和调运数量,得到的总体最小损失对应的路径和调运数量就是最佳供应方案。

问题二分析

问题二的建模目的是在各菜市场短缺量一律不超过需求量的25%的前提条件下,设计一个从收购点至菜市场的定点供应方案,使用于蔬菜调运及预期的短缺损失为最小。经过分析可知,问题二是在问题一的基础上增加了一个约束条件。

增加的约束条件为:各菜市场的供应量不得低于需求量的75%。

问题三分析

问题三的建模目的是为满足菜市场的蔬菜供应需求,要增产蔬菜以弥补供应短缺,设计一个收购点的增产蔬菜供应方案,使得蔬菜向菜市场供应最经济合理。经过分析可知,问题三是在问题一的基础上,增加了一个约束条件,并修改了一个约束条件。

增加的约束条件为:为了满足菜市场的蔬菜供应需求,收购点的总收购量必须不小于菜市场的总需求量。修改的约束条件为:每个菜市场的供应量不再是不大于需求量,而是必须等于需求量。

3问题假设

假设1:设1单位蔬菜为100kg,1单位路程为100m。

假设2:从收购点到菜市场的调运损失只与距离有关,与运输工具和运输费用无关。即一单位路程和一单位蔬菜的运输费用为2元。

其余假设待补充。。。

4建模与求解

变量说明

2016年数学建模蔬菜供应链方案设计,# 力扣,图论,算法

问题一

建模

根据题中所给数据,可以先计算出从收购点 S i S_i Si到菜市场 A j A_j Aj的最小调运损失 c i j c_{ij} cij,再根据 c i j c_{ij} cij和调运的蔬菜数量 x i j x_{ij} xij以及各菜市场的短缺损失建立数学规划模型,求解最小短缺损失,得到最佳的调运方案。需要注意的是,虽然可以把问题分解成两个子问题进行处理,但最终优化时,必须作为一个综合的优化问题进行处理,否则无法得到全局最优解。

  1. 最小调运损失
    首先构造蔬菜供应网点赋权无向图G =(V,E,W),其中V = {S1, S2, S3, A1,…,A8, B1,…,B4}={v1, …, v15},总共15个顶点,W = ( ω i j \omega_{ij} ωij)15×15。
    ω i j = { d i j , v i , v j 之 间 有 路 直 接 相 连 + ∞ , v i , v j 之 间 没 有 路 直 接 相 连 \omega_{ij}=\left\{ \begin{aligned} d_{ij} & , & v_i,v_j之间有路直接相连 \\ +\infty & , & v_i,v_j之间没有路直接相连 \end{aligned} \right. ωij={dij+,,vi,vjvi,vj
    式中 d i j d_{ij} dij v i , v j v_i,v_j vi,vj之间的路程,单位为100m。然后应用Dijkstra算法求得任意两点间的最短路径,并提取需要的收购点 S i , ( i = 1 , 2 , 3 ) S_i,(i=1,2,3) Si,(i=1,2,3) A j , ( j = 1 , 2 , . . . , 8 ) A_j,(j=1,2,...,8) Aj,(j=1,2,...,8)菜市场的最短路径 c i j c_{ij} cij,组成3×8的最短路径矩阵c。由c可得从收购点到菜市场的1单位蔬菜的最小调运损失,由x可得从收购点到菜市场调运的蔬菜数量,二者累乘得总的最小调运损失。下一步我们要建立总损失的数学规划模型,将x求解出来。
  2. 总损失的数学规划模型
    a.目标函数
    从收购点到菜市场的1单位蔬菜的最小调运损失为
    ∑ i = 1 3 ∑ j = 1 8 2 c i j x i j \sum_{i=1}^{3}{\sum_{j=1}^{8}2c_{ij}x_{ij}} i=13j=182cijxij
    总损失不仅要考虑运输带来的调运损失,还要考虑由于蔬菜缺乏造成的损失。经过分析可知,如果菜市场得到的蔬菜小于需求,则损失为单位短缺的损失与短缺的数量之积。菜市场 j 由于蔬菜缺乏造成的最小短缺损失为
    m j = z j ( y j − ∑ i = 1 3 x i j ) m_j=z_j(y_j-\sum_{i=1}^{3}x_{ij}) mj=zj(yji=13xij)
    因而,总损失为最小调运损失+最小短缺损失
    ∑ i = 1 3 ∑ j = 1 8 2 c i j x i j + ∑ j = 1 8 m j \sum_{i=1}^{3}{\sum_{j=1}^{8}2c_{ij}x_{ij}}+\sum_{j=1}^{8}m_j i=13j=182cijxij+j=18mj
    b.约束条件
    所有菜市场调运的蔬菜总量应该与所有收购点的总收购量相等
    ∑ i = 1 3 ∑ j = 1 8 x i j = ∑ i = 1 3 p i \sum_{i=1}^{3}{\sum_{j=1}^{8}x_{ij}}=\sum_{i=1}^{3}p_i i=13j=18xij=i=13pi
    每个菜市场调运的蔬菜总量不大于菜市场的每日需求
    ∑ i = 1 3 x i j ≤ ∑ j = 1 8 y j , j = 1 , 2 , . . . , 8 \sum_{i=1}^{3}x_{ij}\le\sum_{j=1}^{8}y_{j},j=1,2,...,8 i=13xijj=18yj,j=1,2,...,8
    所有菜市场从一个收购点调运的蔬菜总量应该与收购点的每日收购量相等
    ∑ j = 1 8 x i j = p i , i = 1 , 2 , 3 \sum_{j=1}^{8}x_{ij}=p_i,i=1,2,3 j=18xij=pi,i=1,2,3
    非负约束
    x i j ≥ 0 , i = 1 , 2 , 3 , j = 1 , 2 , . . . , 8 x_{ij}\ge0,i=1,2,3,j=1,2,...,8 xij0,i=1,2,3,j=1,2,...,8

代码

clc, clear
% 蔬菜供应方案设计
% 自定义15个顶点名称
NN1 = strcat('S',cellstr(int2str([1:3]')));
NN2 = strcat('A',strtrim(cellstr((int2str([1:8]')))));
NN3 = strcat('B',strtrim(cellstr(int2str([1:4]'))));
NN=[NN1(:)',NN2(:)',NN3(:)'];
% 构建无向图G,图中有15个顶点,30条边
G = graph; G = addnode(G,NN);
L1 = {'S1','A1',4;'S1','A2',8;'S1','A6',6;'S1','B1',7;'S1','B2',4
'S2','A2',7;'S2','A3',7;'S2','B1',6;'S2','B4',11;'S3','A5',6
'S3','A7',5;'S3','A8',10;'S3','B3',8;'A1','A2',7;'A1','A6',5
'A2','B1',3;'A3','S1',8;'A3','A5',5;'A3','B1',5;'A3','B2',4
'A3','B4',6;'A4','B4',5;'A5','B2',7;'A5','B3',6;'A5','B4',3
'A6','B2',5;'A6','B3',7;'A7','A8',11;'A7','B3',10;'A8','B4',6};
G = addedge(G,L1(:,1),L1(:,2), cell2mat(L1(:,3)));
% 求所有点对之间的最短路径,返回一个15×15的矩阵
d = distances(G);
writematrix(d,'data2_1.xlsx')
% 根据最短路径求所有点对的最小运费
c1 = inf*ones(size(d));
c1(d==0)=0; 
ind=(d>0);
c1(ind)=2*ceil(d(ind));
writematrix(c1,'data2_1.xlsx','Sheet', 2)
% 提出3行8列的运费数据,即收购点S到菜市场A的1单位蔬菜的最小运费数据
c = c1(1:3,4:11); 
writematrix(c,'data2_1.xlsx','Sheet', 3)
h=plot(G,'EdgeLabel',G.Edges.Weight,'Layout', 'auto','NodeFontSize',12,'EdgeColor','k');

% y为菜市场每天需求,z为菜市场短缺1单位蔬菜的损失,p为收购点每天的收购量
y = [80, 70, 90, 80, 120, 70, 100, 90];
z = [10, 8, 5, 10, 10, 8, 5, 8];
p = [250, 200, 180]';

prob = optimproblem;
% 要求解的变量x
x = optimvar('x',3,8, 'LowerBound',0);
% 要求解的目标函数
obj = sum(sum(c.*x))+sum(z.*(y-sum(x)));
prob.Objective = obj;
% 约束条件
prob.Constraints.con1 = sum(sum(x))==sum(p);
prob.Constraints.con2 = sum(x) <= y;
prob.Constraints.con3 = sum(x,2) == p;
% 调用solve工具箱求解
[sol, fval, flag, out] = solve(prob)
% 输出最小损失
fval
% 输出方案x
sol.x
writematrix(sol.x,'data2_1.xlsx','Sheet', 4)

求解

利用MATLAB软件对上述模型进行求解,从计算结果得知,求得总损失的最小值为10280元。具体的1单位蔬菜的最小运输费用如下表所示
2016年数学建模蔬菜供应链方案设计,# 力扣,图论,算法
具体的最佳供应方案如下表所示
2016年数学建模蔬菜供应链方案设计,# 力扣,图论,算法

问题二

建模

问题二在问题一的基础上增加了一个约束条件,即规定各菜市场供应量一律不低于需求量的75%
∑ i = 1 3 x i j ≥ 0.75 y j , j = 1 , 2 , . . . , 8 \sum_{i=1}^{3}x_{ij}\ge0.75y_{j},j=1,2,...,8 i=13xij0.75yj,j=1,2,...,8

代码

clc, clear
% 蔬菜供应方案设计
% 自定义15个顶点名称
NN1 = strcat('S',cellstr(int2str([1:3]')));
NN2 = strcat('A',strtrim(cellstr((int2str([1:8]')))));
NN3 = strcat('B',strtrim(cellstr(int2str([1:4]'))));
NN=[NN1(:)',NN2(:)',NN3(:)'];
% 构建无向图G,图中有15个顶点,30条边
G = graph; G = addnode(G,NN);
L1 = {'S1','A1',4;'S1','A2',8;'S1','A6',6;'S1','B1',7;'S1','B2',4
'S2','A2',7;'S2','A3',7;'S2','B1',6;'S2','B4',11;'S3','A5',6
'S3','A7',5;'S3','A8',10;'S3','B3',8;'A1','A2',7;'A1','A6',5
'A2','B1',3;'A3','S1',8;'A3','A5',5;'A3','B1',5;'A3','B2',4
'A3','B4',6;'A4','B4',5;'A5','B2',7;'A5','B3',6;'A5','B4',3
'A6','B2',5;'A6','B3',7;'A7','A8',11;'A7','B3',10;'A8','B4',6};
G = addedge(G,L1(:,1),L1(:,2), cell2mat(L1(:,3)));
% 求所有点对之间的最短路径,返回一个15×15的矩阵
d = distances(G);
writematrix(d,'data2_1.xlsx')
% 根据最短路径求所有点对的最小运费
c1 = inf*ones(size(d));
c1(d==0)=0; 
ind=(d>0);
c1(ind)=2*ceil(d(ind));
writematrix(c1,'data2_1.xlsx','Sheet', 2)
% 提出3行8列的运费数据,即收购点S到菜市场A的1单位蔬菜的最小运费数据
c = c1(1:3,4:11); 
writematrix(c,'data2_1.xlsx','Sheet', 3)
h=plot(G,'EdgeLabel',G.Edges.Weight,'Layout', 'auto','NodeFontSize',12,'EdgeColor','k');
%highlight(h,c,'LineWidth',2,'LineStyle','-') %最短路径虚线加粗

% y为菜市场每天需求,z为菜市场短缺1单位蔬菜的损失,p为收购点每天的收购量
y = [80, 70, 90, 80, 120, 70, 100, 90];
z = [10, 8, 5, 10, 10, 8, 5, 8];
p = [250, 200, 180]';

prob = optimproblem;
x = optimvar('x',3,8, 'LowerBound',0);
obj = sum(sum(c.*x))+sum(z.*(y-sum(x)));
prob.Objective = obj;
% 约束条件
prob.Constraints.con1 = sum(sum(x))==sum(p);
prob.Constraints.con2 = sum(x) <= y;
prob.Constraints.con3 = sum(x,2) == p;
prob.Constraints.con4 = sum(x) >= y*0.75;
[sol, fval, flag, out] = solve(prob)
fval
sol.x
writematrix(sol.x,'data2_1.xlsx','Sheet', 4)

求解

利用MATLAB软件对上述模型进行求解,从计算结果得知,求得问题二的总损失的最小值为10520元。最佳调运路线不变,具体的问题二的最佳供应方案如下表
2016年数学建模蔬菜供应链方案设计,# 力扣,图论,算法

问题三

建模

问题三是在问题一的基础上,增加了一个约束条件,并修改了一个约束条件。
增加的约束条件为:为了满足菜市场的蔬菜供应需求,收购点的总收购量必须不小于菜市场的总需求量
∑ i = 1 3 p i ≥ ∑ j = 1 8 y j \sum_{i=1}^{3}p_{i}\ge\sum_{j=1}^{8}y_{j} i=13pij=18yj
修改的约束条件为:每个菜市场的供应量不再是不大于需求量,而是必须等于需求量
∑ i = 1 3 x i j = ∑ j = 1 8 y j , j = 1 , 2 , . . . , 8 \sum_{i=1}^{3}x_{ij}=\sum_{j=1}^{8}y_{j},j=1,2,...,8 i=13xij=j=18yj,j=1,2,...,8

代码

clc, clear
% 蔬菜供应方案设计
% 自定义15个顶点名称
NN1 = strcat('S',cellstr(int2str([1:3]')));
NN2 = strcat('A',strtrim(cellstr((int2str([1:8]')))));
NN3 = strcat('B',strtrim(cellstr(int2str([1:4]'))));
NN=[NN1(:)',NN2(:)',NN3(:)'];
% 构建无向图G,图中有15个顶点,30条边
G = graph; G = addnode(G,NN);
L1 = {'S1','A1',4;'S1','A2',8;'S1','A6',6;'S1','B1',7;'S1','B2',4
'S2','A2',7;'S2','A3',7;'S2','B1',6;'S2','B4',11;'S3','A5',6
'S3','A7',5;'S3','A8',10;'S3','B3',8;'A1','A2',7;'A1','A6',5
'A2','B1',3;'A3','S1',8;'A3','A5',5;'A3','B1',5;'A3','B2',4
'A3','B4',6;'A4','B4',5;'A5','B2',7;'A5','B3',6;'A5','B4',3
'A6','B2',5;'A6','B3',7;'A7','A8',11;'A7','B3',10;'A8','B4',6};
G = addedge(G,L1(:,1),L1(:,2), cell2mat(L1(:,3)));
% 求所有点对之间的最短路径,返回一个15×15的矩阵
d = distances(G);
writematrix(d,'data2_1.xlsx')
% 根据最短路径求所有点对的最小运费
c1 = inf*ones(size(d));
c1(d==0)=0; 
ind=(d>0);
c1(ind)=2*ceil(d(ind));
writematrix(c1,'data2_1.xlsx','Sheet', 2)
% 提出3行8列的运费数据,即收购点S到菜市场A的1单位蔬菜的最小运费数据
c = c1(1:3,4:11); 
writematrix(c,'data2_1.xlsx','Sheet', 3)
h=plot(G,'EdgeLabel',G.Edges.Weight,'Layout', 'auto','NodeFontSize',12,'EdgeColor','k');
%highlight(h,c,'LineWidth',2,'LineStyle','-') %最短路径虚线加粗

% y为菜市场每天需求,z为菜市场短缺1单位蔬菜的损失,p为收购点每天的收购量
y = [80, 70, 90, 80, 120, 70, 100, 90];
z = [10, 8, 5, 10, 10, 8, 5, 8];

prob = optimproblem;
% 要求解的变量多了一个p
x = optimvar('x',3,8, 'LowerBound',0);
p = optimvar('p',3,1, 'LowerBound',0);
obj = sum(sum(c.*x))+sum(z.*(y-sum(x)));
prob.Objective = obj;
% 约束条件
prob.Constraints.con1 = sum(sum(x))==sum(p);
prob.Constraints.con2 = sum(x) == y;
prob.Constraints.con3 = sum(x,2) == p;
prob.Constraints.con4 = sum(p) >= sum(y);
[sol, fval, flag, out] = solve(prob)
fval
% 输出x
sol.x
% 输出p
sol.p
writematrix(sol.x,'data2_1.xlsx','Sheet', 4)

求解

利用MATLAB软件对上述模型进行求解,从计算结果得知,求得问题三的总损失的最小值为10200元。最佳调运路线不变,具体的问题三的最佳供应方案如下表所示。
2016年数学建模蔬菜供应链方案设计,# 力扣,图论,算法

5结果分析

本次练习通过对江平市A、B、C三个蔬菜收购点向全市①到⑧八个菜市场的蔬菜供应方案的设计问题进行研究,使用Dijkstra算法计算各收购点至各菜市场之间的最短路径,根据题目信息建立线性规划模型,并对不同约束条件下的三个问题进行模型求解。对求解结果进行分析可知,最短路径算法与线性规划模型可以有效求解此类问题。文章来源地址https://www.toymoban.com/news/detail-536719.html

到了这里,关于图论+线性规划建模——蔬菜供应方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模(二)线性规划

    课程推荐:6 线性规划模型基本原理与编程实现_哔哩哔哩_bilibili 目录 一、线性规划的实例与定义 1.1 线性规划的实例 1.2 线性规划的定义 1.3 最优解 1.4 线性规划的Mathlab标准形式 1.5 使用linprog函数 二、线性规划模型建模实战与代码 2.1 问题提出 2.2 基本假设 2.3 模型的分析与建

    2024年02月12日
    浏览(27)
  • 数学建模——线性规划类

    [x,y]=linprog(c,A,b,Aeq,beq,lb,ub) 例如: max需要加负号变成min、=需要加负号变成= matlab (1)基于求解器 (2)基于问题 con中根据符号分类 python (1)绝对值 (2)min(max(q*x)) (见风投案例模型二) 【0】题目描述 【1】模型一 模型一:设定风险度的最大接受值,在不太冒险的情况下

    2024年02月13日
    浏览(32)
  • 数学建模| 线性规划(Matlab)

    线性规划:约束条件和目标函数都是线性的。简单点说,所有的决策变量在目标函数和约束条件中都是一次方。 Matlab函数: 参数解释: func 表示目标函数。 A 表示不等式约束条件系数矩阵,b 表示不等式约束条件常数矩阵。 Aeq 表示等式约束条件系数矩阵,beq 表示等式约束条

    2024年02月07日
    浏览(32)
  • 数学建模【非线性规划】

    一、非线性规划简介 通过分析问题判断是用线性规划还是非线性规划 线性规划:模型中所有的变量都是一次方 非线性规划:模型中至少一个变量是非线性 非线性规划在形式上与线性规划非常类似,但在数学上求解却困难很多 线性规划有通用的求解准确解的方法(单纯形法

    2024年02月19日
    浏览(36)
  • 数学建模——非线性规划

    目录 基本概念 凸规划 判别定理 二次规划模型 非线性规划的求解 无约束极值问题 有约束极值问题 基于求解器的解法 基于问题的求解 其他 非线性规划:描述目标函数或约束条件条件的数学表达式中,至少有一个是非线性函数。 记是n维欧式空间中的一个点(n维向量),,

    2024年02月06日
    浏览(32)
  • 一、数学建模之线性规划篇

    1.定义 2.例题 3.使用软件及解题 1.线性规划 (Linear Programming,简称LP)是一种数学优化技术,线性规划作为运筹学的一个重要分支,专门研究在给定一组线性约束条件下,如何找到一个最优的决策,使得目标函数取得最大或最小值。 线性规划属于运筹学 (Operations Research)这

    2024年02月12日
    浏览(26)
  • MATLAB-数学建模-线性规划-1

    目录 1.1  线性规划模型的一般形式: 1.2  线性规划模型          minz=f(x)         s.t.     (i=1,2,···,m) 1和2组成的模型属于约束优化  f(x)称为目标函数,称为约束条件   决策变量 、 目标函数 、 约束条件 构成了线性规划的3个基本要素 min    u=cx s.t.      Ax b        

    2024年02月09日
    浏览(32)
  • 数学建模 | 第一章 线性规划例题

    例1.1 某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元。生产甲机床需用A、B机器加工,加工时间分别为每台2小时和1小时;生产乙机床需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别为A机器10小时、B机器8小时和

    2024年02月03日
    浏览(34)
  • 数学建模学习---非线性规划

    目录 前言 一、非线性规划问题是什么? 二、非线性规划的数学模型 1.一般形式 三、线性规划的 Matlab 解法 Matlab 中非线性规划的数学模型: 2.Matlab 中的命令: 本篇讲述非线性规划问题极其matlab解法 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规

    2024年02月06日
    浏览(43)
  • 数学建模(五)非线性规划

     课程推荐: 13 非线性规划算法在数学建模中的应用与编程实现_哔哩哔哩_bilibili 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题 。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不像线性规划有单纯形法这一通用方法,

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包