计算机服务器的开发


计算机服务器的开发

使用Gurobi计算服务器通常不需要更改您的程序。本节介绍少数例外情况。

编码的鲁棒性

客户机-服务器计算引入了一些健壮性情况,当您的所有计算都发生在一台机器上时,您不会遇到这些情况。具体来说,通过在客户机和服务器之间传递数据,您的程序依赖于两台机器都可用,以及两个系统之间的不间断网络连接。Gurobi Compute Server的排队和负载平衡功能可以处理可能出现的绝大多数问题,但是如果您希望实现最大的健壮性,您可以在程序中执行一些额外的步骤。

您可能需要防范的一种情况是,当构建和解决优化模型的程序部分正在运行时,您失去了与服务器的连接。Gurobi计算服务器将自动将排队的作业路由到另一个服务器,但当服务器宕机时正在运行的作业被中断(客户端将收到一个网络错误)。如果您希望您的程序能够在这种故障中幸存下来,您将需要以这样一种方式来构建它,以便它将重新构建并解析优化模型以响应网络错误。具体的步骤取决于应用程序,但它们通常涉及将初始Gurobi环境创建和最后一次Gurobi调用之间的代码封装到一个函数中,在出现错误时可以重新调用该函数。

计算服务器不支持的特性

如前所述,有一些Gurobi特性在Compute Server中不受支持。我们已经提到了其中的一些,但为了完整起见,我们将在这里给出完整的列表。如果希望应用程序在Compute Server环境中工作,则需要避免使用这些特性。

不受支持的特性有:

  • 用户削减:MIPNODE回调不支持,所以你没有机会添加自己的剪切。用户削减并不是正确性的必要条件,但是严重依赖用户削减的应用程序可能会遇到性能问题。
  • 单个Gurobi环境中的多线程:一般来说,Gurobi程序实际上并不支持这一点,但是计算服务器环境中的结果很难跟踪,因此我们想在这里再次提到这一点。从环境构建的所有模型都共享到计算服务器的单个连接。这个连接不能处理多个同时发送的消息。如果您希望从同一个程序中的多个线程调用Gurobi,您应该确保每个线程都在自己的Gurobi环境中工作。
  • 高级单形基例程:使用单纯形基的C例程(GRBFSolveGRBBSolveGRBBinvColjGRBBinvRowi,GRBgetBasisHead)不支持。