开发计算服务器

使用Gurobi计算服务器通常不需要修改程序。本节涵盖了一些例外。

编码的鲁棒性

客户机-服务器计算引入了一些鲁棒性的情况下,你不会当你所有的计算发生在单个机器上。具体地说,通过在客户端和服务器之间传递数据,程序依赖于两台机器是可用的,在两个系统之间的不间断的网络连接。Gurobi的排队和负载平衡能力计算服务器可以处理绝大多数的问题可能出现,但是你可以采取一些额外的步骤在您的程序,如果你想实现最大程度的鲁棒性。

一个场景可能需要防范的情况你失去连接到服务器的部分程序,构建和解决运行优化模型。Gurobi计算服务器会自动排队的工作路由到另一个服务器,但运行时服务器宕机的工作被打断(客户会收到网络错误)。如果你希望你的程序能够生存这样的失败,您将需要建筑师在这样一种方式,它将重建和解决响应的优化模型网络错误。这样做是应用程序依赖的具体步骤,但他们通常涉及封装代码之间的初始Gurobi环境创建和最后Gurobi调用一个函数,可以视图的一个错误。

在计算服务器功能不支持

正如前面提到的,有几个Gurobi计算服务器中不支持的功能。我们已经提到了其中一些,但我们会给这里的完整列表的完整性。你需要避免使用这些特性如果你想让你的应用程序在计算服务器环境中工作。

不支持的功能有:

  • 用户削减:MIPNODE回调不支持,所以你不会有机会添加自己的削减。用户减少没有必要的正确性,但严重依赖他们的应用程序可能会遇到性能问题。
  • 用户的解决方案:Gurobi通过回调函数传递一个可行的解决方案并不支持。这意味着相应的回调例程制定一个解决方案GRBcbsolutionC,GRBCallback: setSolutionc++,GRBCallback.setSolution在Java中,GRBCallback.SetSolutionnet,Model.cbSetSolution在Python中,不受支持。
  • 在单个Gurobi多线程环境:实际上这不是支持Gurobi程序一般,但结果在计算服务器环境中足够难以追踪,我们想再次提到它。所有的模型由一个环境共享一个连接到计算服务器。这一个连接不能同时处理多个消息。如果你想从多个线程调用Gurobi同样的程序,你应该确保每个线程自身Gurobi环境中工作。
  • 先进的单纯形基础的例程:与单纯形基础的C例程(GRBFSolve,GRBBSolve,GRBBinvColj,GRBBinvRowi,GRBgetBasisHead不支持)。