广域网(WAN)的性能考虑


广域网(WAN)的性能考虑

虽然使用Gurobi Compute Server通常不需要您对代码进行任何修改,但性能方面的考虑有时会迫使您在客户端和服务器通过慢速网络(例如互联网)连接时进行一些优化。我们将简要讨论这个问题的根源,以及解决这个问题所需的更改。

在Gurobi Compute Server中,对Gurobi例程的调用可以在客户机和服务器之间产生一条网络消息。一条单独的消息并不昂贵,但是发送成百上千条消息可能相当耗时。Compute Server做了一些事情来减少这类消息的数量。首先,它大量使用了缓存。例如,如果您请求单个变量的属性,客户机库将检索并存储所有变量的该属性的值,因此后续请求将不需要额外的通信。另外,我们的懒惰的更新模型构建方法允许我们缓冲模型的添加和修改,例如,您可以一次自由地构建您的模型一个约束。当您请求模型更新时,您的更改将通过一条大消息通知服务器。

说到这里,我们应该补充一点,并不是所有的方法都被缓存或缓冲。因此,我们建议您避免做以下事情:

  • 检索约束矩阵的各个行和列的非零值(例如,使用GRBgetconstrs在C语言中,GRBModel: getRow在c++中,GBModel.getRow在Java中,GRBModel。GetRow在。net,Model.getRow在Python中)。
  • 检索单个字符串值属性。

当然,网络开销取决于发送的消息的数量和这些消息的大小。我们自动执行数据压缩,以减少传输非常大的消息所花费的时间。然而,正如您所料,当在慢速网络上解决非常大的模型时,您会注意到一些延迟。