目录
1.算法流程简介
2.算法核心代码
#非线性整数规划
#我们一般采用蒙特卡洛算法来进行估算求解
#在实验次数足够多的情况下我们认为此解是非线性整数规划的最优解
"""
#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.模拟蒙特卡洛实验求解
#下面我们就用蒙特卡洛思想来求解非线性整数规划问题
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)