1

我有这个模型,我正在使用 cbc:

    @variable(premex, PRODAMOUNT[op_k in keys(_ORDER_PRODUCTs_ALL), u_k in keys(UNITS), t in TIME], Int, lower_bound = 0)

    @objective(
        premex,
        Min,
        sum(
            sum(
                    (
                        (iszero(
                                sum(
                                    PRODAMOUNT[op_k, u_k, t] * _PRODUCTs_ALL[op["product"]]["bagSize"] 
                                    for (op_k, op) in _ORDER_PRODUCTs_ALL
                                )
                            ) ? 0 : u["cap"]
                        ) - 
                        sum(
                            PRODAMOUNT[op_k, u_k, t] * _PRODUCTs_ALL[op["product"]]["bagSize"] 
                            for (op_k, op) in _ORDER_PRODUCTs_ALL
                        )
                    ) * u["util_cost1"]
                    for (u_k, u) in UNITS
                )  
                for t in TIME
            )
    )

这是一个约束,不允许一个 UNIT / t 上的 PRODAMOUNT 超过该单元的最大容量。

     for t in TIME
            @constraint(
                premex, 
                [u_k in keys(UNITS)],
                sum(
                    PRODAMOUNT[op_k, u_k, t] * _PRODUCTs_ALL[op["product"]]["bagSize"]
                    for (op_k, op) in _ORDER_PRODUCTs_ALL
                    ) 
                    <= UNITS[u_k]["cap"]
            )
        end

目标值:-461275000.00000000

如何?为什么是负值?

UNITS[u_k][“cap”] 和 u[“cap”] 是一样的

4

1 回答 1

1

交叉发布时请提供链接:https ://discourse.julialang.org/t/why-the-objective-value-is-negative/46781

您的目标函数是负的,因为第一项在传递给 Cbc之前评估为 0,只留下负总和。

于 2020-09-18T03:18:58.867 回答