在IBM CPLEX中使用约束编程创建Golomb标尺

2020-07-09 10:48:56

这是一个通过IBM CPLEX使用约束编程(CP)生成Golomb标尺的示例应用程序。制作尺子是学习CP的一种有趣的方式(即使它不是制作它们的最有效的方法)。IBM也在他们的文档中将其用作培训练习。它包括一个Web前端,用于显示求解过程的实时指标(见下文)。

在数学中,Golomb标尺是沿着虚构的标尺在整数位置上的一组标记,使得没有两对标记的距离相等。尺子上的记号是它的顺序,两个记号之间的最大距离是它的长度。Golomb标尺的平移和反射被认为是微不足道的,因此最小的标记通常放在0,下一个标记放在它的两个可能值中较小的一个。

后端是用Scala编写的。前端是使用REACTION 16的单页面应用程序,并通过Web套接字监听求解器事件。

下面是一个运行顺序为7的应用程序的示例。它显示当前找到的最佳标尺,以及诸如当前目标值、NumberOfChoicePoints、NumberOfBranches、MemoryUsage等实时指标。

根│自述文件.md<;-您在这里!│└─服务器&;求解器││自述文件.md||.|.│└─客户端<;-网络客户端│自述文件.md||。||。

解算器逻辑的核心在GolombRuler.scala中。这就是我们建模问题并启动CPLEX解决流程的地方。Server.scala设置Web服务器以接受求解请求,并设置Web套接字以将搜索过程更新发送到客户端。客户端目录包含订阅此Web套接字的Reaction前端,并提供用于向服务器发送解决方案请求的UI。

为了在自述中包含图片,我们做了这样一个小技巧:将图片上传到这期gihub,然后复制gihub托管的资源的url。