python数学建模基础教程,如何用python数学建模

这篇文章主要介绍了python数学建模基础教程,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

🚧 线性规划

声明:

  • 采用如下求解方法:

    • python cxpy
    • matlab
    • lingo
  • 5.1 求解下列线性规划的解:
    m a x   z = 8 x 1 − 2 x 2 + 3 x 3 − 4 x 4 − 2 x 5 { x 1 + x 2 + x 3 + x 4 + x 5 ≤ 400 , x 1 + 2 x 2 + 2 x 3 + x 4 + 6 x 5 ≤ 800 , 2 x 1 + x 2 + 6 x 3 ≤ 200 , x 3 + x 4 + 5 x 5 ≤ 200 , 0 ≤ x i ≤ 99 ,   i = 1 , 2 , 3 , 4 x 5 ≥ 10 max~z=8x_1-2x_2+3x_3-4x_4-2x_5\\ \left\{ \begin{aligned} x_1+x_2+x_3+x_4+x_5\le&400,\\ x_1+2x_2+2x_3+x_4+6x_5&\le800,\\ 2x_1+x_2+6x_3\le200,\\ x_3+x_4+5x_5\le 200,\\ 0\le x_i \le99,~i=1,2,3,4\\ x_5\ge10 \end{aligned} \right. max z=8x1​−2x2​+3x3​−4x4​−2x5​⎩ ⎨ ⎧​x1​+x2​+x3​+x4​+x5​≤x1​+2x2​+2x3​+x4​+6x5​2x1​+x2​+6x3​≤200,x3​+x4​+5x5​≤200,0≤xi​≤99, i=1,2,3,4x5​≥10​400,≤800,

    • matlab
    c=-[8,-2,3,-1,-2];%价值向量
     A=[ones(1,5);1,2,2,1,6;2,1,6,0,0;0,0,1,1,5];
     b=[400,800,200,200]';
     [x,fval]=linprog(c,A,b,[],[],[zeros(1,4),-10]',[ones(1,4)*99,inf]');
     disp('最优解为:');disp(x)
     disp('最大值为:');disp(-fval)
     %结果
     Optimal solution found.
    
    最优解为:
       99.0000
             0
        0.3333
             0
      -10.0000
    
    最大值为:
       813
    
    
    • python
    #导入凸优化库
    import  cvxpy as cv
    import numpy as np
    #构造系数矩阵
    A=np.array([[1]*5,[1,2,2,1,6],[2,1,6,0,0],[0,0,1,1,5]])
    b=np.array([400,800,200,200])
    c=np.array([8,-2,3,-1,-2])
    x=cv.Variable(5)#5个决策变量 x等同与列向量
    obj=cv.Maximize(c@x)#构造目标函数
    con=[A@x<=b,x[0:-1]<=99*np.ones(4),x[4]>=-10,x[0:4]>=0]
    prob=cv.Problem(obj,con)
    prob.solve(solver='GLPK_MI')
    print('可行解=\n')
    for i in x.value:
        print(i,'\n')
    print('最大值:',prob.value)
    #结果:
    可行解=
    
    99.0  
    -0.0  
    0.3333333333333333  
    -0.0  
    -10.0  
    最大值: 813.0
    
    • lingo

    结果: 813

    sets:
    factory/1..5/:x,c;
    plant/1..4/:k;
    endsets
    data:
    c=8,-2,3,-1,-2;
    enddata
    
    max=@sum(factory(i):x(i)*c(i));
    @sum(factory(i):x(i))<400;
    x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)<800;
    2*x(1)+x(2)+6*x(3)<200;
    x(3)+x(4)+5*x(5)<200;
    @for(plant(i):@bnd(0,x(i),99));
    @free(x(5));
    x(5)>-10;
    
                                       X( 1)        99.00000            
                                       X( 2)        0.000000            
                                       X( 3)       0.3333333            
                                       X( 4)        0.000000            
                                       X( 5)       -10.00000            
    
  • 5.2 求5.4节模型三的解

    模型三:
    m i n   s { m a x 1 ≤ i ≤ n { q i x i } } − ( 1 − s ) ∑ i = 0 n ( r i − p i ) x i { ∑ i = 0 n ( 1 + p i ) x i = M , x i ≥ 0 , i = 0 , 1 , 2 , … min~s\big\{\mathop{max}\limits_{1\le i\le n}\{q_ix_i\}\big\}-(1-s)\sum_{i=0}^{n}(r_i-p_i)x_i\\ \left\{ \begin{aligned} &\sum_{i=0}^{n}(1+p_i)x_i=M,\\ &x_i\ge0,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值