optimization - 多产品交付优化问题:简化模型和约束
问题描述
我正在尝试解决以下问题:
我们有不同的独特产品需要交付给客户(1 个产品 = 1 个客户)。我们有几家工厂,有些产品只能由一家工厂生产。一个产品需要 10 天才能在工厂里制造出来。然后我有几辆车来运送产品。一辆车可以运送多种产品。也可以将成品存放在生产地以外的其他工厂。
目标是降低运费。
例如,如果两个客户离工厂很近,最好将产品从一家商店转移到另一家商店,以便进行分组交付。
我使用了以下模型:
集合是:T代表时间
我为工厂
J 代表产品(或客户)
K 用于车辆
(并且 V 是节点,所以 V = I union J)
我的决策变量是: : 1 如果产品 j 是工厂 i 在时间 t 的产品
: 1 如果产品 j 在时间 t 在车辆 k 上,并且路线 i1 -> i2(i1 和 i2 在 V)
: 1 如果车辆 k 在时间 t 行驶路线 i1 -> i2
: 1 如果车辆 k 在时间 t 访问节点 i。(我在 V)
最小化的函数是: (c[i1][i2] 是路线 i1 -> i2 的成本)
并且约束是:
最后一个对我来说是个问题的约束:我们只能从放置的地方运输产品。所以我使用以下约束,这意味着要离开 i1,产品必须已经在 i1 中生产或之前已经到达 i1。
问题是这非常非常慢。5 个客户和 2 个工厂需要几分钟(T_max = 45)。
我需要找到一种方法在生产中使用下降速度算法,我将拥有 ap 30/40 客户、5 个工厂和 T_max = 90。
你知道如何固定算法吗?正是这最后的约束导致了缓慢的优化。
也许我的建模是错误的,有一种更简单的方法可以做到这一点。
或者我认为我们可以简化最后一个约束,例如添加另一个决策变量,但我没有找到解决方案。
非常感谢您的帮助 !
解决方案
推荐阅读
- c# - Unity 中倾斜的物体不会显示阴影?
- angular - 数据绑定后更改样式
- bash - 如何组合两个多行输出命令?
- c++ - 无法防止来自不同用户的同一程序的多个实例
- google-cloud-platform - 在不破坏构建日志的情况下并行化 google cloudbuild 步骤
- powershell - 在 AD 的 OU 中搜索登录到多台计算机的用户的最快方法
- c++11 - 为什么我会收到错误“使用临时作为左值”
- sql-server - SQL Server:从 jpeg 文件更新二进制数据以获取多个 jpeg 文件
- python-3.x - python“请求”如何提供历史url数据?
- multithreading - 在 perl 中将线程队列对象作为对象变量传递