人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解

    • 一、原理介绍
      • 1. 单纯形法的原理
      • 2. 大M法的原理
      • 3. 拉格朗日乘子法的原理
    • 二、线性规划中的单纯形法、大M法的excel求解
      • 1. 线性规划求解题目
      • 2. 单纯形法的excel求解
        • 计算结果
      • 3. 大M法的excel求解
    • 三、单纯形法python编程
      • 1. 建立线性回归分析标准化模型
      • 2. 编写python代码
    • 四、调用optimize包和scipy求解线性规划
      • 1. 编写python代码
    • 五、两种方法结果对比
      • 1. 单纯形法
      • 2. scipy库
    • 六、拉格朗日乘子法求解
      • 1. 线性规划题目
      • 2. 手工数学推导
      • 3. python求解

一、原理介绍

1. 单纯形法的原理

单纯形法就是秉承“保证每一次迭代比前一次更优”的基本思想:先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进后更优的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解,也可用此法判别。

2. 大M法的原理

在线性规划问题的约束条件中加人工变量后,要求在目标函数中相应地添加认为的M或一M为系数的项。在极大化问题中,对人工变量赋于一M作为其系数;在极小化问题中,对人工变量赋于一个M作为其系数,M为一任意大(而非无穷大)的正数。把M看作一个代数符号参与运算,用单纯形法求解,故称此方法为大M法。

3. 拉格朗日乘子法的原理

基本的拉格朗日乘子法就是求函数f(x1,x2,…)在约束条件g(x1,x2,…)=0下的极值的方法。其主要思想是将约束条件函数与原函数联立,从而求出使原函数取得极值的各个变量的解。

二、线性规划中的单纯形法、大M法的excel求解

1. 线性规划求解题目

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第1张图片

2. 单纯形法的excel求解

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第2张图片

计算结果

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第3张图片
人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第4张图片

3. 大M法的excel求解

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第5张图片

三、单纯形法python编程

1. 建立线性回归分析标准化模型

创建txt文档如下:
人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第6张图片

2. 编写python代码

import numpy as np
def pivot(d,bn):
    l = list(d[0][:-2])
    jnum = l.index(max(l)) #转入编号
    m = []
    for i in range(bn):
        if d[i][jnum] == 0:
            m.append(0.)
        else:
            m.append(d[i][-1]/d[i][jnum])
    inum = m.index(min([x for x in m[1:] if x!=0]))  #转出下标
    s[inum-1] = jnum
    r = d[inum][jnum]
    d[inum] /= r
    for i in [x for x in range(bn) if x !=inum]:
        r = d[i][jnum]
        d[i] -= r * d[inum]        
def solve(d,bn):
    flag = True
    while flag:
        if max(list(d[0][:-1])) <= 0: #直至所有系数小于等于0
            flag = False
        else:
            pivot(d,bn)            
def printSol(d,cn):
    for i in range(cn - 1):
        if i in s:
            print("x"+str(i)+"=%.2f" % d[s.index(i)+1][-1])
        else:
            print("x"+str(i)+"=0.00")
    print("objective is %.2f"%(-d[0][-1]))
d = np.loadtxt("./data.txt", dtype=np.float)
(bn,cn) = d.shape
s = list(range(cn-bn,cn-1)) #基变量列表
solve(d,bn)
printSol(d,cn)

运行结果:
人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第7张图片

四、调用optimize包和scipy求解线性规划

1. 编写python代码

#导入包
from scipy import optimize
import numpy as np
#确定c,A_ub,B_ub
c = np.array([50,100])
A_ub = np.array([[1,1],[2,1],[0,1]])
B_ub = np.array([300,400,250])
#求解
res =optimize.linprog(-c,A_ub,B_ub)
print(res)

运行结果:
人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第8张图片

五、两种方法结果对比

1. 单纯形法

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第9张图片

2. scipy库

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第10张图片

六、拉格朗日乘子法求解

1. 线性规划题目

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第11张图片

2. 手工数学推导

人工智能与机器学习——线性规划中的单纯形法、大M法的excel求解、python求解;非线性规划的拉格朗日乘子法求解、python求解_第12张图片
当 a = b = c = 1时
Vmax= 1.5396007
x = y = z = 0.5773503

3. python求解

from scipy.optimize import minimize
import numpy as np
e = 1e-10 # 非常接近0的值
fun = lambda x : 8 * (x[0] * x[1] * x[2]) # 约束函数f(x,y,z) =8 *x*y*z
cons = ({'type': 'eq', 'fun': lambda x: x[0]**2+ x[1]**2+ x[2]**2 - 1}, # x^2 + y^2 + z^2=1
        {'type': 'ineq', 'fun': lambda x: x[0] - e}, # x>=e,即 x > 0
        {'type': 'ineq', 'fun': lambda x: x[1] - e},
        {'type': 'ineq', 'fun': lambda x: x[2] - e}
       )
x0 = np.array((1.0, 1.0, 1.0)) # 设置初始值
res = minimize(fun, x0, method='SLSQP', constraints=cons)
print('最大值:',res.fun)
print('最优解:',res.x)
print('迭代终止是否成功:', res.success)
print('迭代终止原因:', res.message)

运行结果:
在这里插入图片描述

你可能感兴趣的:(人工智能与机器学习,人工智能,python,机器学习)