【问题标题】:obtain parameters from another parameters从另一个参数获取参数
【发布时间】:2019-02-19 19:45:02
【问题描述】:

如何将大于某个数的参数转换为1,小于某个数的参数转换为0。

例如,我设置了参数

model.distance = Param(model.dc,model.location,domain=NonNegativeReals)

param distance := DC1 Shelter1 0.61 DC1 Shelter2 3.32 DC1 Shelter3 9.5 DC1 Shelter4 6.52 DC2 Shelter1 6.04 DC2 Shelter2 0.51 DC2 Shelter3 1.34 DC2 Shelter4 6.06 ;

我怎样才能获得一个新的参数说 model.a 即 (threshold = 2):

DC1 Shelter1 0 DC1 Shelter2 1 DC1 Shelter3 1 DC1 Shelter4 1 DC2 Shelter1 1 DC2 Shelter2 0 DC2 Shelter3 0 DC2 Shelter4 1

我知道这是一个简单的问题,但我是 pyomo 和 python 的新手。 谢谢

【问题讨论】:

    标签: python pyomo


    【解决方案1】:

    这是我的总代码:

    from pyomo.environ import *
    

    model = AbstractModel("Warehouse Location")

    model.location = Set() model.dc = Set()

    model.distance = Param(model.dc,model.location,domain=NonNegativeReals) model.demands = Param(model.location)

    model.x = Var(model.dc, model.location, domain=NonNegativeReals) model.y = Var(model.dc, within=Binary)

    def obj_expression(model): transportation_cost = sum(sum(2*model.y[i]*model.distance[i,j]*model.x[i,j] \ for j in model.location) for i in model.dc) fixed_cost = 300000*summation(model.y) return transportation_cost + fixed_cost model.OBJ = Objective(rule=obj_expression)

    def supply_constraints_rule(model,dc): return sum(model.x[dc,l] for l in model.location) <= 150000 model.supply_Constraint = Constraint(model.dc, rule=supply_constraints_rule)

    def supply_constraints_rule(model,dc): return sum(model.x[dc,l] for l in model.location) <= 150000 model.supply_Constraint = Constraint(model.dc, rule=supply_constraints_rule)

    def demand_constraints_rule(model, l): return sum(model.y[dc]*model.x[dc,l] for dc in model.dc) >= model.demands[l] model.demand_Constraint = Constraint(model.location, rule=demand_constraints_rule)

    此约束要求至少 60% 的需求距离 DC 不到 2 英里

    def LOS_Constraints_rule():
    model.a = model.distance >= 2 return summation(model.a, model.x)/summation(model.x) >= 0.6 model.LOS_Constraint = Constraint(model, rule=LOS_Constraints_rule)

    opt = SolverFactory('gurobi', solver_io='python') instance = model.create_instance("Continuous Location.dat") results = opt.solve(instance) instance.display()

    这是我的数据:

    set dc := DC1 DC2 DC3 DC4 DC5;

    set location := Shelter1 Shelter2 Shelter3 Shelter4 Shelter5 Shelter6 Shelter7 Shelter8;

    param distance := DC1 Shelter1 0.61 DC1 Shelter2 3.32 DC1 Shelter3 9.5 DC1 Shelter4 6.52 DC1 Shelter5 7.77 DC1 Shelter6 1.92 DC1 Shelter7 8.52 DC1 Shelter8 9.75 DC2 Shelter1 6.04 DC2 Shelter2 0.51 DC2 Shelter3 1.34 DC2 Shelter4 6.06 DC2 Shelter5 0.22 DC2 Shelter6 6.33 DC2 Shelter7 4.61 DC2 Shelter8 3.28 DC3 Shelter1 4.99 DC3 Shelter2 2.41 DC3 Shelter3 2.33 DC3 Shelter4 3.95 DC3 Shelter5 8.84 DC3 Shelter6 7.94 DC3 Shelter7 7.87 DC3 Shelter8 0.94 DC4 Shelter1 5.58 DC4 Shelter2 8.8 DC4 Shelter3 6.32 DC4 Shelter4 8.54 DC4 Shelter5 5.15 DC4 Shelter6 6.06 DC4 Shelter7 9.42 DC4 Shelter8 2.16 DC5 Shelter1 7.87 DC5 Shelter2 9.64 DC5 Shelter3 0.7 DC5 Shelter4 5.92 DC5 Shelter5 2.7 DC5 Shelter6 0.26 DC5 Shelter7 0.5 DC5 Shelter8 3.4;

    param demands := Shelter1 14000 Shelter2 8000 Shelter3 25000 Shelter4 22000 Shelter5 20000 Shelter6 17000 Shelter7 18500 Shelter8 23000 ;

    【讨论】:

    • 问题是 "LOS_Constraints_rule():" 中的参数 model.a ,我不知道如何从我设置的参数 model.distance 中正确获取它
    【解决方案2】:

    对有问题的数字应用逻辑

    "将大于某个数的参数转换为1,小于某个数的参数转换为0"

    在 Python 中,会这样写

    THRESHOLD = 2
    
    if parameter > THRESHOLD:
        print(1)
    else:
        print(0)
    

    我不确定您共享的代码是如何使用的,但我们假设您希望将其包装在一个函数中

    def evaluate_parameter(parameter):
        THRESHOLD = 2
    
        if parameter > THRESHOLD:
            return 1
        else:
            return 0
    

    您可以像这样输入参数的值

    result = evaluate_parameter(0.61)
    print(result)  # prints 0
    

    【讨论】:

    • 我知道你的意思,但是它只返回一个值,我想要一个与原始参数(model.distance)具有相同结构的参数(model.a)。无论如何,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多