From 95f484af5cfd2ceac5e5c61cca18412a88b544c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=98=E8=8D=A3=E5=8D=9A?= <2858829498@qq.com> Date: Sun, 14 Jul 2024 14:52:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=BF=E6=80=A7=E8=A7=84=E5=88=92=E4=BE=8B?= =?UTF-8?q?=E9=A2=981=5F3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mengtkl.m | 61 -------------- NLP.m | 135 ----------------------------- README.md | 2 - fun1.m | 3 - fun2.m | 15 ---- intLP.m | 49 ----------- mm1.m | 140 ------------------------------- mm2_graph.m | 94 --------------------- LPej1_3.m => 姚安欣/LPej1_3.m | 80 +++++++++--------- 9 files changed, 40 insertions(+), 539 deletions(-) delete mode 100644 Mengtkl.m delete mode 100644 NLP.m delete mode 100644 README.md delete mode 100644 fun1.m delete mode 100644 fun2.m delete mode 100644 intLP.m delete mode 100644 mm1.m delete mode 100644 mm2_graph.m rename LPej1_3.m => 姚安欣/LPej1_3.m (97%) diff --git a/Mengtkl.m b/Mengtkl.m deleted file mode 100644 index f7a9028..0000000 --- a/Mengtkl.m +++ /dev/null @@ -1,61 +0,0 @@ - -%27页例题 -clc; clear; close all; -n = 10000; % 使用较小的 n 值以便更容易可视化 -x = unifrnd(0, 12, [1, n]); -y = unifrnd(0, 9, [1, n]); -ans=sum(y < x.^2 & x <= 3)+sum(y < 12 - x & x >= 3); -ans=ans/n; -% 找出满足条件的点 -condition1 = y < x.^2 & x <= 3; -condition2 = y < 12 - x & x >= 3; -condition_met = condition1 | condition2; % 满足任一条件的点 -condition_not_met = ~condition_met; % 不满足任何条件的点 - -% 创建图形窗口 -figure; -hold on;%在同一张图上绘图 - -% 绘制不满足任何条件的点 -scatter(x(condition_not_met), y(condition_not_met), 'k.'); % k----黑色 .----绘制样式 -%scatter绘制散点图 -%x(condition_not_met) 会返回一个新的向量,其中只包含 x 中对应 condition_not_met 为 true 的元素。 - -% 绘制满足第一个条件的点 -scatter(x(condition1), y(condition1), 'r.'); % 红色 - -% 绘制满足第二个条件的点 -scatter(x(condition2), y(condition2), 'b.'); % 蓝色 - -% 添加图例和标签 -legend('不满足任何条件的点', '满足 y < x^2 且 x <= 3 的点', '满足 y < 12 - x 且 x >= 3 的点'); -xlabel('x'); -ylabel('y'); -title('随机生成的点和满足条件的点'); -hold off; - - -%蒙特卡洛法求圆周率qw -clc;clear;close all; - -n=10^5; -x=unifrnd(-1,1,[1,n]); -y=unifrnd(-1,1,[1,n]); -con1=x.^2+y.^2<=1; -con2=~con1; -ans=sum(x.^2+y.^2<=1); -ans=ans/n*4; - -figure ; -hold on; - -scatter(x(con1),y(con1),'r.'); -scatter(x(con2),y(con2),'k.'); - -hold off; - - - - - - diff --git a/NLP.m b/NLP.m deleted file mode 100644 index 7f46e9b..0000000 --- a/NLP.m +++ /dev/null @@ -1,135 +0,0 @@ - -%非线性规划 - -%P42例题 - -%求解 -clc,clear,format long g,close all; -syms x1 x2;%符号变量(用于定义函数、求解方程、计算导数和积分) -f=(339-0.01*x1-0.003*x2)*x1+(399-0.004*x1-0.01*x2)*x2-(195*x1+225*x2+400000); -f=simplify(f); -f1=diff(f,x1),f2=diff(f,x2); -[x10,x20]=solve(f1,f2);%求驻点即使f1,f2为0的点 -x10=round(double(x10));%四舍五入 -x20=round(double(x20)); -f0=subs(f,{x1,x2},{x10,x20}); -f0=double(f0); -subplot(121); -fmesh(f,[0,10000,0,10000]);%3维 -%xlabel('x1','Interpreter','latex'); -%ylabel('y1','Interpreter','latex'); -xlabel('x1'); -ylabel('y1'); -subplot(122); -L=fcontour(f,[0,10000,0,10000]); -contour(L.XData,L.YData,L.ZData,'ShowText','on'); -xlabel('x1'); -ylabel('y1'); -p1=339-0.01*x10-0.003*x20; -p2=399-0.004*x10-0.01*x20; -c=195*x10+225*x20+400000; -rate=f0/c; - -%灵敏性检验 分析 最优解 对 19村彩电价格下降幅度 的灵敏性 -clc,clear,close all,format long g; -syms x1 x2 a; -X1=4735,X2=7043,AA=0.01,FF=553641; -f=(339-a*x1-0.003*x2)*x1+(399-0.004*x1-0.01*x2)*x2-(195*x1+225*x2+400000); -f1=diff(f,x1),f2=diff(f,x2); -[x10,x20]=solve(f1,f2); - -subplot(121); -fplot(x10,[0.002,0.02]); -xlabel('a'); -ylabel('x1'); - -subplot(122); -fplot(x20,[0.002,0.02]); -xlabel('a'); -ylabel('x2'); - -dx1=diff(x10,a); -dx10=subs(dx1,a,0.01),dx10=double(dx10); -sx1a=dx10*AA/X1; - -dx2=diff(x20,a); -dx20=subs(dx2,a,0.01),dx20=double(dx20); -sx2a=dx20*AA/X2; - -F=subs(f,[x1,x2],[x10,x20]); -F=simplify(F); -figure,fplot(F,[0.002,0.02]); -xlabel('a'); -ylabel('profit'); -dpro=diff(F,a); -dpro0=subs(F,a,0.01); -sya=dpro0*AA/FF; - -%当a提高10% -f3=subs(f,[x1,x2,a],[X1,X2,0.011]),f3=double(f3); -f4=subs(F,[a],0.011); -%相对误差 -delta=(f4-f3)/f4; -delta=double(delta); -%相对误差很小,说明在19寸的价格下降幅度在一定范围内发生变化时,仍然按照不变时的最优解来确定生产方案,仍然可以获得几乎最优的利润。 - - - - - -%使用fmincon的简单例子 - -%蒙特卡罗确定初始值 -clc,clear,close all; -n=10^7; -x1=unifrnd(0,12,[1,n]); -x2=unifrnd(0,12,[1,n]); -fmin=+inf; -for i=1:n - x=[x1(i),x2(i)]; - if ((x1(i)-1)^2-x2(i)-6<=0) & (-2*x1(i)+3*x2(i)-6<=0) - temp=x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2); - if temp=35; -for i=1:5 - con(i+1)=x(i)+x(i+1)>=cnt(i+1); -end -prob.Constraints.con=con; -[sol,fval,flag,out]=solve(prob); -X=sol.x; - - -%linprog解法 -clc; clear; close all; format long g; -f=[1,1,1,1,1,1]; -intcon=[1:6]; -A=zeros(6,6); -A(1,1)=-1; -A(1,6)=-1; -for i=1:5 - A(i+1,i)=-1; - A(i+1,i+1)=-1; -end -lb=zeros(6,1);%注意不是lb=0 -b=[-35;-40;-50;-45;-55;-30]; -[x,fval]=intlinprog(f,intcon,A,b,[],[],lb); - - - -%01规划 -%背包问题 - -f=-[540,200,180,350,60,150,280,450,320,120]; -intcon=1:10; -lb=zeros(10); -ub=ones(10); -A=[6,3,4,5,1,2,3,5,4,2]; -b=30; -[x,fval]=intlinprog(f,intcon,A,b,[],[],lb,ub); - - - - diff --git a/mm1.m b/mm1.m deleted file mode 100644 index fafc5c7..0000000 --- a/mm1.m +++ /dev/null @@ -1,140 +0,0 @@ -%投资利益与风险1998A题 - - -%模型一 给定风险承受程度,求最大利益 -f=[-0.05,-0.27,-0.19,-0.185,-0.185]; - -%A矩阵 -%A=[0,0.025,0.015,0.055,0.026]; %错误 -%b=[1,1,1,1,1]; -A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];%不等式约束条件矩阵 - -%Aeq、beq -Aeq=[1,1.01,1.02,1.045,1.065]; -beq=1; - -%lb -%lb=0; %错误 -lb=zeros(5,1); - - -%可承担风险率a -a=(0:0.001:0.05); - -%保存最优解 -Q=zeros(1,length(a)); -xx=[];%空矩阵存放最优解对应x的值 -for i=1:length(a) - b=a(i)*ones(4,1); - [x,y]=linprog(f,A,b,Aeq,beq,lb); - Q(i)=-y;%注意取负!!! - xx=[xx;x']; -end -plot(a,Q,'*r'); -xlabel("风险率"); -ylabel("最大收益"); - - -%模型二 收益、风险按权重组合 -% f0=[-0.05,-0.27,-0.19,-0.185,-0.185]; -% w=(0:0.1:1); -% Aeq=[1,1.01,1.02,1.045,1.065,0]; -% beq=1; -% lb=0; -% xx=[]; -% Q=zeros(1,length(w)); -% A=[zeros(5,1),diag([0.025,0.025,0.055,0.065,0])]; -% b=ones(5,1); -% for i=1:length(w) -% f=[-w(i)*f0,1-w(i)]; -% b=x(end)*b; -% [x,y]=linprog(f,A,b,Aeq,beq,lb); -% Q(i)=-y; -% xx=[xx,x']; -% end -% plot(w,Q,'*r'); - -%模型二 收益、风险按权重组合 -clc; clear; close all; format long g; - -M = 10000; -prob = optimproblem; -x = optimvar('x', 6, 1, 'LowerBound', 0); -r = [0.05, 0.28, 0.21, 0.23, 0.25]; -p = [0, 0.01, 0.02, 0.045, 0.065]; -q = [0, 0.025, 0.015, 0.055, 0.026]'; -%w = 0:0.1:1; -w = 0.7:0.03:1; -V = []; -Q = []; -X = []; - -prob.Constraints.con1 = (1 + p) * x(1:end-1) == M; -prob.Constraints.con2 = (q(2:end).* x(2:end-1))<= x(end); %下标从1开始 - -for i = 1:length(w) - prob.Objective = w(i) * x(end) - (1 - w(i)) * (r - p) * x(1:end-1); %注意大小写 - [sol, fval, flag, out] = solve(prob); - xx = sol.x; - V = [V, max(q.* xx(1:end-1))]; - Q = [Q, (r - p) * xx(1:end-1)]; - X = [X, xx]; - - plot(V, Q, '*-'); - grid on; - xlabel('风险'); - ylabel('收益'); -end - - - -%模型三:达到一定盈利水平,极小化风险 - -clc; clear; close all; format long g; -M=10000; -k=1500:100:3000; -prob = optimproblem; -x = optimvar('x', 5, 1, 'LowerBound', 0);%下界为0 -r = [0.05, 0.28, 0.21, 0.23, 0.25]; -p = [0, 0.01, 0.02, 0.045, 0.065]; -q = [0, 0.025, 0.015, 0.055, 0.026]'; - -V = []; -Q = []; -X = []; -t = optimvar('t', 'LowerBound', 0); - -%prob.Objective=max(q.*x);%极小化风险 -for i=1:length(k) - prob.Objective = t; % 极小化风险 - prob.Constraints.con1 = (1 + p) * x == M; - prob.Constraints.con2=((r-p)*x>=k(i));%达到一定盈利水平 - prob.Constraints.con3=(q.*x<=t); - [sol,fval,flag,out]=solve(prob); - if flag==1 - xx=sol.x; - X=[X,xx]; - Q=[Q,(r-p)*xx]; - V=[V,fval]; - else - xx=-1*ones(5,1); - X=[X,xx]; - Q=[Q,-1]; - V=[V,-1]; - end - - -end -plot(k,V,'*-'); - - - - - - - - - - - - diff --git a/mm2_graph.m b/mm2_graph.m deleted file mode 100644 index 4a0e1a8..0000000 --- a/mm2_graph.m +++ /dev/null @@ -1,94 +0,0 @@ -%ej.4.10仓库选址 -clc; clear; close all; format long g; -a=zeros(6); -a(1,[2,5])=[20,15]; -a(2,[1,3,4,5])=[20,20,60,25]; -a(3,[2,4,5])=[20,30,18]; -a(4,[2,3])=[60,30]; -a(5,[1,2,3,6])=[15,25,18,15]; -a(6,5)=15; -s = cellstr(strcat('销售点',int2str([1:6]'))); -G=graph(a,s); -P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12); -D=[]; -for i=1:6 - temp=0; - for j=1:6 - [path,d]=shortestpath(G,i,j); - if d>temp; - temp=d; - end - end - D=[D,temp]; -end -[minVal,minInd]=min(D); -disp('仓库应建在销售点'); -disp(minInd); - - -%答案版 -clc; clear; close all; - -% 初始化邻接矩阵 -a = zeros(6); -a(1, [2, 5]) = [20, 15]; -a(2, 3:5) = [20, 60, 25]; -a(3, [4, 5]) = [30, 18]; -a(5, 6) = 15; - -% 创建节点标签 -s = cellstr(strcat('V', int2str([1:6]'))); - -% 创建图 -G = graph(a, s, 'upper'); - -% 计算所有节点之间的最短路径距离矩阵 -d = distances(G); - -% 计算从每个节点到其他节点的最大最短路径距离 -D = max(d, [], 2)'; %第三个参数 2 指定沿着矩阵的第二个维度(即列)进行操作。 - -% 找到最大最短路径距离中的最小值及其下标 -[minD, minIndex] = min(D); - -% 绘制图 -plot(G, 'EdgeLabel', G.Edges.Weight, 'Layout', 'force');%设置边的标签 - -% 显示结果 -fprintf('从每个节点到任意其他节点的最大最短路径距离: \n'); -disp(D); -fprintf('最大最短路径距离中的最小值为: %f\n', minD); -fprintf('对应的节点为: V%d\n', minIndex); - -%设备更新问题; -clc;clear;close all; -a=zeros(6); -a(1,[2:6])=[15,20,27,37,54]; -a(2,[3:6])=[15,20,27,37]; -a(3,[4:6])=[16,21,28]; -a(4,[5:6])=[16,21]; -a(5,6)=17; -s=cellstr(strcat(int2str((1:6)'),'年初')); -G=digraph(a,s); -P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12); -[path,d]=shortestpath(G,1,6);%注意参数个数 -highlight(P,path,"EdgeColor","red",'LineWidth',3.5); - - -%最小生成树 -clc;clear; -a=zeros(9); -a(1,[2:9])=[2 1 3 4 4 2 5 4]; % 顶点1到其他顶点的边的权重 -a(2,[3 9])=[4 1]; % 顶点2到顶点3、顶点9的边的权重 -a(3,4)=1; % 同上。因为写过1到3,和2到3的边的权重,无需重复设 -a(4,5)=1; -a(5,6)=5; -a(6,7)=2; -a(7,8)=3; -a(8,9)=5; -s=cellstr(strcat('节点',int2str([1:9]'))); -G=graph(a,s,'upper'); -P=plot(G,'layout','force'); -T=minspantree(G,'Method','sparse'); -L=sum(T.Edges.Weight); -highlight(P,T,"EdgeColor","red",'LineWidth',2.5); diff --git a/LPej1_3.m b/姚安欣/LPej1_3.m similarity index 97% rename from LPej1_3.m rename to 姚安欣/LPej1_3.m index 2804b6a..5b0c097 100644 --- a/LPej1_3.m +++ b/姚安欣/LPej1_3.m @@ -1,40 +1,40 @@ -clc; clear; close all; format long g; -prob=optimproblem; -x=optimvar('x',9,1,'LowerBound',0,'Type','integer'); -p=[0.25,0.35,0.50]; -r=[1.25,2.00,2.80]; -ot=[5,10,0;7,9,12;6,8,0;4,0,11;7,0,0]; -total=1000:200:3000; -odp=[300/6000,321/10000,250/4000,783/7000,200/4000]; - -X=[]; -Q=[]; - -for i=1:length(total) - % prob.Objective=(ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7))*odp(1)+(ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9))*odp(2)+(ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8)))*odp(3)+(ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9))*odp(4)+(ot(5,1)*(x(3)+x(6)))*odp(5)-(r(1)-p(1))*ones(1,6)*x(1:6)-(r(2)-p(2))*ones(1,2)*x(7:8)-(r(3)-p(3))*x(9); - dp1=(ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7))*odp(1); - dp2=(ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9))*odp(2); - dp3=(ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8)))*odp(3); - dp4=(ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9))*odp(4); - dp5=(ot(5,1)*(x(3)+x(6)))*odp(5); - dp=dp1+dp2+dp3+dp4+dp5; - prob.Objective=dp-(r(1)-p(1))*ones(1,6)*x(1:6)-(r(2)-p(2))*ones(1,2)*x(7:8)-(r(3)-p(3))*x(9); - prob.Constraints.con1=p(1)*ones(1,6)*x(1:6)+p(2)*ones(1,2)*x(7:8)+p(3)*x(9)+dp<=total(i);%总费用 - prob.Constraints.con2=ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7)<=6000;%A1 - prob.Constraints.con3=ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9)<=10000; - prob.Constraints.con4=ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8))<=4000; - prob.Constraints.con5=ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9)<=7000; - prob.Constraints.con6=ot(5,1)*(x(3)+x(6))<=4000; - [sol,fval,flag,out]=solve(prob); - xx=sol.x; - - X=[X,xx]; - Q=[Q,-fval]; - -end -plot(total,Q,'*-'); - - - - - +clc; clear; close all; format long g; +prob=optimproblem; +x=optimvar('x',9,1,'LowerBound',0,'Type','integer'); +p=[0.25,0.35,0.50]; +r=[1.25,2.00,2.80]; +ot=[5,10,0;7,9,12;6,8,0;4,0,11;7,0,0]; +total=1000:200:3000; +odp=[300/6000,321/10000,250/4000,783/7000,200/4000]; + +X=[]; +Q=[]; + +for i=1:length(total) + % prob.Objective=(ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7))*odp(1)+(ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9))*odp(2)+(ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8)))*odp(3)+(ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9))*odp(4)+(ot(5,1)*(x(3)+x(6)))*odp(5)-(r(1)-p(1))*ones(1,6)*x(1:6)-(r(2)-p(2))*ones(1,2)*x(7:8)-(r(3)-p(3))*x(9); + dp1=(ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7))*odp(1); + dp2=(ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9))*odp(2); + dp3=(ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8)))*odp(3); + dp4=(ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9))*odp(4); + dp5=(ot(5,1)*(x(3)+x(6)))*odp(5); + dp=dp1+dp2+dp3+dp4+dp5; + prob.Objective=dp-(r(1)-p(1))*ones(1,6)*x(1:6)-(r(2)-p(2))*ones(1,2)*x(7:8)-(r(3)-p(3))*x(9); + prob.Constraints.con1=p(1)*ones(1,6)*x(1:6)+p(2)*ones(1,2)*x(7:8)+p(3)*x(9)+dp<=total(i);%总费用 + prob.Constraints.con2=ot(1,1)*ones(1,3)*x(1:3)+ot(1,2)*x(7)<=6000;%A1 + prob.Constraints.con3=ot(2,1)*ones(1,3)*x(4:6)+ot(2,2)*x(8)+ot(2,3)*x(9)<=10000; + prob.Constraints.con4=ot(3,1)*(x(1)+x(4))+ot(3,2)*(x(7)+x(8))<=4000; + prob.Constraints.con5=ot(4,1)*(x(2)+x(5))+ot(4,3)*x(9)<=7000; + prob.Constraints.con6=ot(5,1)*(x(3)+x(6))<=4000; + [sol,fval,flag,out]=solve(prob); + xx=sol.x; + + X=[X,xx]; + Q=[Q,-fval]; + +end +plot(total,Q,'*-'); + + + + +