问题描述
旅行商问题 (TSP) 表述如下:
- 给定一个有向图 G = (V,E),其中 V = {1,...,n} 是一组节点,E
- 还让每个弧 e = (i,j) 被分配一个数字 c[i,j],这是弧 e 的长度。
- 问题是找到一条最短长度的闭合路径,只通过 G 的每个节点一次。
问题的一些额外限制/修改:
- “推销员”每天在同一个节点(比如节点 1)开始和结束。
- 销售员每天最多可以工作 10 小时。
- 销售员到达节点后,必须执行一些工作,每个节点的工作量将在 1-4 小时之间变化。在开始/结束节点(节点 1)不需要做任何工作。
- 销售员可以多次通过同一个节点,但任何重复的节点访问都不需要任何额外的工作(即销售员只是在前往下一个节点的途中通过节点)。根据节点的地理位置,销售员很可能多次穿越一个节点。
任何人都可以向我指出此问题的现有解决方案吗?最好使用 MiniZinc(我最近完成了 coursera 课程),但也可能会解释 Python 解决方案。
解决方法
这是我使用的版本,它是用 AMPL(另一种数学语言)编写的,您可以轻松地将其转换为 minizinc, 并添加额外的约束