Xpress Mosel为所有行返回零

问题描述

我通常是Xpress mosel和线性编程的绝对入门者,因此,如果我犯了任何明显的错误,请原谅我。话虽如此,我目前正在解决问题并在Xpress Workbench中实现它。

问题:

假设有一个小型棋牌制造商生产国际象棋A和B的情况。国际象棋A的定价为30美元,而国际象棋B的定价为40美元。国际象棋制造商已经从10个想要购买这两种国际象棋的零售商那里收到了订单,每个零售商产生的每种国际象棋产生不同的运输费用。如果国际象棋制造商只能向每个零售商出售最少100套国际象棋,而最多可以出售300套国际象棋,那么该国际象棋制造商应向每个零售商出售多少个国际象棋以最大化利润?

如果我没记错的话,目标函数将是:

利润=(30 * x1-s * x1)+(40 * x2-s * x2)

其中x1是国际象棋集合A的数量,X2是国际象棋集合B的数量,而s是运输成本。

约束是:

x1,x2

x1,x2> = 100

x1,x2> = 0

每个零售商的运输费用为:

Shipping Costs

下面的代码显示了我在mosel中实现此问题的尝试。

id;display Name;parent_id/id
__export__.ecommerce_category1;Services;
__export__.ecommerce_category2;Courses;__export__.ecommerce_category1
__export__.ecommerce_category3;Sales & Marketing;__export__.ecommerce_category2
__export__.ecommerce_category4;Communication Skills;__export__.ecommerce_category2

其中CHESSA和CHESSB是要出售的国际象棋的数量,PROFITOFCHESSA和PROFITOFCHESSB是出售每套国际象棋的利润,S_COSTS是运输成本。

但是,运行此问题的所有零售商返回零。非常感谢您在这里做错了什么。

解决方法

您的模型有两个问题:

首先,您不初始化PROFITOFCHESSAPROFITOFCHESSB。因此它们都为0,即生产任何模型都不会获得任何利润。更糟糕的是,对于每种生产的型号,您都必须支付运输费用。由于目标是最大化利润,因此求解器将选择生成尽可能少的模型。每个零售商生产的最小模型数量为100(根据您的约束)。因此,求解器为每个零售商提供了最少的金额。

第二个问题是您的模型过于简单:每生产一件产品,您都会获利并支付一定的运输成本。如果利润大于运输成本,那么最好的解决方案是生产尽可能多的商品(在您的情况下,每个零售商300个)。如果利润小于运输成本,那么最好的解决方案是生产尽可能少的物品(每个零售商100件)。因此,这里没有太多要优化的地方。