Optimization 优化Python

Optimization 优化Python,optimization,Optimization,我正试图得到最佳的解决方案 column heading: D_name , Vial_size1 ,Vial_size2 ,Vial_size3 , cost , units_needed row 1: Act , 120 , 400 , 0 , $5 , 738 row 2: dug , 80 , 200 , 400 , $40 , 2

我正试图得到最佳的解决方案

 column heading: D_name , Vial_size1  ,Vial_size2 ,Vial_size3 , cost , units_needed

 row 1:       Act    ,   120        ,   400     ,     0     ,  $5   ,    738
 row 2:       dug     ,  80         ,   200      ,    400   ,  $40   ,   262

   
excel中的数据

列标题:小瓶价格大小

第1行:小瓶尺寸1 5 120

第2行:小瓶尺寸2 5 400

prob=LpProblem("Dose_Vial",LpMinimize)

import pandas as pd
df = pd.read_excel (r'C:\Users\*****\Desktop\Vial.xls')
print (df)

# Create a list of the Vial_Size
Vial_Size = list(df['Vials'])

# Create a dictinary of units for all Vial_Size
size = dict(zip(Vial_Size,df['size']))

# Create a dictinary of price for all Vial_Size
Price = dict(zip(Vial_Size,df['Price']))

# print dictionaries

print(Vial_Size)
print(size)
print(Price)

vial_vars = LpVariable.dicts("Vials",size,lowBound=0,cat='Integer')

# start building the LP problem by adding the main objective function

prob += lpSum([Price[i]*vial_vars[i]*size[i] for i in size])

# adding constraints

prob += lpSum([size[f] * vial_vars[f] for f in size]) >= 738

# The status of the solution is printed to the screen

prob.solve()
print("Status:", LpStatus[prob.status])

# In case the problem is ill-formulated or there is not sufficient information,
# the solution may be infeasible or unbounded

for v in prob.variables():
    if v.varValue>0:
        print(v.name, "=", format(round(v.varValue)))
          
    
Vials_Vial_Size_1 = 3
Vials_Vial_Size_2 = 1

obj =round((value(prob.objective)))

print("The total cost of optimized vials: ${}".format(round(obj)))

The total cost of optimized vials: $3800
'

如何将其设置为2种或更多药物,并获得最佳解决方案。

以下是解决问题的第一部分的方法,即找到能够最大限度减少浪费的药瓶组合。我不确定价格起着什么作用:

from pulp import *
import pandas as pd
import csv

drugs_dict = {"D_name": ['Act', 'dug'],
              "Vial_size1": [120, 80],
              "Vial_size2": [400, 200],
              "Vial_size3": [0, 400],
              "cost": [5, 40],
              "units_needed": [738, 262]}

df = pd.DataFrame(drugs_dict)

drugs = list(df['D_name'])
vial_1_size = dict(zip(drugs, drugs_dict["Vial_size1"]))
vial_2_size = dict(zip(drugs, drugs_dict["Vial_size2"]))
vial_3_size = dict(zip(drugs, drugs_dict["Vial_size3"]))
units_needed = dict(zip(drugs, drugs_dict["units_needed"]))

results = []

for drug in drugs:
    print(f"drug = {drug}")

    # setup minimum waste problem
    prob = LpProblem("Minimum Waste Problem", LpMinimize)

    # create decision variables
    vial_1_var = LpVariable("Vial_1", lowBound=0, cat='Integer')
    vial_2_var = LpVariable("Vial_2", lowBound=0, cat='Integer')
    vial_3_var = LpVariable("Vial_3", lowBound=0, cat='Integer')

    units = lpSum([vial_1_size[drug] * vial_1_var +
                         vial_2_size[drug] * vial_2_var +
                         vial_3_size[drug] * vial_3_var])

    # objective function
    prob += units

    # constraints
    prob += units >= units_needed[drug]

    prob.solve()

    print(f"units = {units.value()}")
    
    for v in prob.variables():
        if v.varValue > 0:
            print(v.name, "=", v.varValue)
            
    results.append([drug, units.value(), int(vial_1_var.value() or 0), int(vial_2_var.value() or 0), int(vial_3_var.value() or 0)])
    
with open('vial_results.csv', 'w', newline='') as csvfile:
    csv_writer = csv.writer(csvfile)
    csv_writer.writerow(['drug', 'units', 'vial_1', 'vial_2', 'vial_3'])
    csv_writer.writerows(results)
跑步可以带来:

drug = Act
units = 760.0
Vial_1 = 3.0
Vial_2 = 1.0
drug = dug
units = 280.0
Vial_1 = 1.0
Vial_2 = 1.0

请显示您使用的代码,并详细描述您遇到的“许多问题”。对于数据框中的每一行,都会设置并解决一个优化问题。抱歉,有一个输入错误。现在已修复。添加了将结果保存到csv文件vial_results.csv