数学建模--非整数规划问题蒙特卡洛方法的Python求解

目录

1.算法流程简介

2.算法核心代码

1.算法流程简介

#非线性整数规划
#我们一般采用蒙特卡洛算法来进行估算求解
#在实验次数足够多的情况下我们认为此解是非线性整数规划的最优解
"""
#Qustion1:
   求解: 
       max z=x1^2+x2^2+3x^2+4x4^2+2x5^2-8x1-2x2-3x3-x4-2x5
       s.t.:
            0<=xi<=99
            x1+x2+x3+x4+x5<=400
            x1+2x2+2x3+x4+6x5<=800
            2x1+x2+6x3<=200
            x3+x4+5x5<=500
"""
#下面我们就用蒙特卡洛思想来求解非线性整数规划问题
#算法求解流程如下:
1.创建一个判断st的函数,进行x值的筛选
2.创建随机整数数据量
3.模拟蒙特卡洛实验求解

2.算法核心代码

#下面我们就用蒙特卡洛思想来求解非线性整数规划问题
import numpy as np
#1.创建一个判断st的函数,进行x值的筛选
def checkst(x):
    if x.sum()>400:
        return False
    if x[0]+2*x[1]+2*x[2]+x[3]+6*x[4]>800:
        return False 
    if 2*x[0]+x[1]+6*x[2]>200:
        return False 
    if x[2]+x[3]+5*x[4]>500:
        return False 
    return True
#2.创建随机整数数据量
def random_data():
    x=np.random.randint(100,size=5)
    #如果被
    while not checkst(x):
        x=random_data()
    return x
#3.模拟蒙特卡洛实验求解
n=1000000
ans=-1
for i in range(n):
    test_number=random_data()
    #比较此时是否是最大值
    ans=max(ans,test_number.all())
print("本题的最优解是:",ans)

你可能感兴趣的:(数学建模,数学建模,python)