目录
1.算法流程简介
2.算法核心代码
1.算法流程简介
#非线性整数规划
#我们一般采用蒙特卡洛算法来进行估算求解
#在实验次数足够多的情况下我们认为此解是非线性整数规划的最优解
"""
#Qustion1:求解: max z=x1^2+x2^2+3x^2+4x4^2+2x5^2-8x1-2x2-3x3-x4-2x5s.t.:0<=xi<=99x1+x2+x3+x4+x5<=400x1+2x2+2x3+x4+6x5<=8002x1+x2+6x3<=200x3+x4+5x5<=500
"""
#下面我们就用蒙特卡洛思想来求解非线性整数规划问题
#算法求解流程如下:
1.创建一个判断st的函数,进行x值的筛选
2.创建随机整数数据量
3.模拟蒙特卡洛实验求解
2.算法核心代码
#下面我们就用蒙特卡洛思想来求解非线性整数规划问题
import numpy as np
#1.创建一个判断st的函数,进行x值的筛选
def checkst(x):if x.sum()>400:return Falseif 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)