Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gurobi与Python(优化迭代/模拟)_Python_Loops_Simulation_Gurobi - Fatal编程技术网

Gurobi与Python(优化迭代/模拟)

Gurobi与Python(优化迭代/模拟),python,loops,simulation,gurobi,Python,Loops,Simulation,Gurobi,我建立了一个随机需求(~N(100,40))的优化模型。我的优化模型本身给了我看起来很有希望的结果。现在我下一步要做的是通过生成不同的正态分布随机需求来循环(模拟)整个优化问题。但它无法附加我需要的目标值,以便在模拟后导出预期值 错误代码为:无法检索属性“objVal” 任何帮助都将不胜感激 for i in range(n_samples): demand = np.random.normal(100, 40, 10) capacity = np.tile(100, 10) shortfall

我建立了一个随机需求(~N(100,40))的优化模型。我的优化模型本身给了我看起来很有希望的结果。现在我下一步要做的是通过生成不同的正态分布随机需求来循环(模拟)整个优化问题。但它无法附加我需要的目标值,以便在模拟后导出预期值

错误代码为:无法检索属性“objVal” 任何帮助都将不胜感激

for i in range(n_samples):
demand = np.random.normal(100, 40, 10)
capacity = np.tile(100, 10)
shortfall = 0 

    m = gp.Model("Chaining Network")

    Network = {}
    Fulfillment = {}
    Lostsale = {}

    for i in range (nr_supplier):
        for j in range (nr_retailer):
            Fulfillment[i,j] = m.addVar()
            Network[i,j] = m.addVar(vtype = GRB.BINARY)
            
    for j in range (nr_retailer):       
        Lostsale[j] = m.addVar()


    m.setObjective (gp.quicksum(Lostsale[j] for j in range(nr_retailer)), GRB.MINIMIZE)   


    m.addConstr(sum(Network[i,j] for i in range (nr_supplier) for j in range(nr_retailer)) <= maxnet)
 
    for i in range(nr_supplier):
        for j in range(nr_retailer):
            m.addConstr(Fulfillment[i,j] <= bigM*Network[i,j])
         

    for j in range (nr_retailer):
        m.addConstr(sum(Fulfillment[i,j] for i in range(nr_supplier)) + Lostsale[j] >= demand[j] )


    for i in range (nr_supplier):
        m.addConstr(sum(Fulfillment[i,j] for j in range(nr_retailer)) <= capacity[i] )

    for j in range(nr_retailer):
         m.addConstr(Lostsale[j] == demand[j] - sum(Fulfillment[i,j] for i in range(nr_supplier)))

    for i in range(nr_supplier):
        for j in range(nr_retailer):
            if i == j:
                m.addConstr(Fulfillment[i,j] == min(demand[j], capacity[i]))
        
    m.optimize()
    res = m.objVal
    shortfall =+ res

estimate = np.mean(shortfall)/n_samples
print(estimate)
适用于范围内的i(n_个样本):
需求=np.随机.正常(100,40,10)
容量=np.瓷砖(100,10)
差额=0
m=gp.模型(“链接网络”)
网络={}
履行={}
Lostsale={}
对于范围内的i(nr_供应商):
对于j系列(nr_零售商):
实现[i,j]=m.addVar()
网络[i,j]=m.addVar(vtype=GRB.BINARY)
对于j系列(nr_零售商):
Lostsale[j]=m.addVar()
m、 setObjective(gp.quicksum(范围内j的损失[j]),GRB.MINIMIZE)

m、 addConstr(sum(范围内i的网络[i,j](范围内nr_供应商)范围内j的网络[i,j])您应该检查优化过程的解决方案状态。只有在优化成功终止时,您才能查询目标值:

if m.status == GRB.OPTIMAL:
    print('Optimal objective: %g' % m.objVal)
elif m.status == GRB.INF_OR_UNBD:
    print('Model is infeasible or unbounded')
    sys.exit(0)
elif m.status == GRB.INFEASIBLE:
    print('Model is infeasible')
    sys.exit(0)
elif m.status == GRB.UNBOUNDED:
    print('Model is unbounded')
    sys.exit(0)
else:
    print('Optimization ended with status %d' % m.status)
    sys.exit(0)