gurobipy.Batch#

class Batch#

Gurobi批处理对象。批处理优化是Gurobi集群管理器提供的一项功能。它允许客户端程序构建优化模型,将其提交到计算服务器集群(通过集群管理器),并在稍后检查模型的状态并检索其解决方案。有关更多信息,请参阅批处理优化部分。

批处理对象上常用的方法包括 update(从集群管理器刷新属性),abort(中止批处理请求的执行),retry(为中断或失败的批处理重试优化),discard(从集群管理器中移除批处理请求及其所有相关信息),以及 getJSONSolution(查询批处理请求的解决方案信息)。

这些方法建立在调用集群管理器REST API的基础上。它们旨在简化此类调用,但请注意,您始终可以选择直接调用REST API。

批处理对象有四个属性:

您可以像访问其他属性一样访问它们的值: batch.BatchStatus, batch.BatchID等。请注意,所有Batch 属性都是本地缓存的,只有在您创建客户端批处理对象或显式更新此缓存时才会更新,这可以通过调用update来完成。

Batch(batchID, env)#

给定一个由optimizeBatch返回的BatchID,以及一个可以连接到适当的集群管理器的Gurobi环境(即已正确设置参数CSManager用户名ServerPassword的环境),此函数返回一个Batch对象。通过它,您可以查询相关批处理请求的当前状态,并且一旦批处理请求被处理,您可以查询其解决方案。详情和示例请参阅批量优化部分。

Parameters:
  • batchID – 您想要访问状态和其他信息的批处理请求的ID。

  • env – 新批处理对象应创建的环境。

Returns:

新的批处理对象。

Example:
batch = gp.Batch(batchID, env)

# Automatically disposed with context manager
with gp.Batch(batchID, env) as batch:
  pass
abort()#

此方法指示集群管理器中止此批处理请求的处理,将其状态更改为ABORTED。有关更多详细信息,请参阅批处理状态代码部分。

Example:
starttime = time.time()
while batch.BatchStatus == GRB.BATCH_SUBMITTED:
    # Abort this batch if it is taking too long
    curtime = time.time()
    if curtime - starttime > maxwaittime:
        batch.abort()
        break
discard()#

此方法指示集群管理器删除与相关批处理请求相关的所有信息,包括存储的解决方案(如果可用)。对相关批处理请求的进一步查询将失败,并返回错误代码DATA_NOT_AVAILABLE。请谨慎使用此功能,因为删除的信息无法恢复。

Example:
# Remove batch request from manager
batch.discard()
dispose()#

释放与此Batch对象关联的所有资源。调用此方法后,不得再使用此Batch对象。

Example:
batch.dispose()
getJSONSolution()#

此方法从集群管理器检索已完成批处理请求的解决方案。解决方案以JSON解决方案字符串的形式返回。为了使此调用成功,批处理请求的状态必须为COMPLETED。此外,请注意,存储在集群管理器端的结果文件必须经过gzip压缩,并且此批处理应仅关联一个结果文件;对于通过API以编程方式提交的批处理,这两种情况都将成立。请参阅批处理状态代码部分以获取更多详细信息。

Example:
print("JSON solution:")
# Get JSON solution as string, create dict from it
sol = json.loads(batch.getJSONSolution())
retry()#

此方法指示集群管理器重试优化失败或中止的批处理请求,将其状态更改为已提交。 请参阅批处理状态代码部分以获取更多详细信息。

Example:
starttime = time.time()
while batch.BatchStatus == GRB.BATCH_SUBMITTED:
    # Abort this batch if it is taking too long
    curtime = time.time()
    if curtime - starttime > maxwaittime:
        batch.abort()
        break

    # Wait for two seconds
    time.sleep(2)

    # Update the resident attribute cache of the Batch object with the
    # latest values from the cluster manager.
    batch.update()

    # If the batch failed, we retry it
    if batch.BatchStatus == GRB.BATCH_FAILED:
        batch.retry()
update()#

所有批处理属性值都在本地缓存,因此查询返回的是上次与集群管理器通信时收到的值。此方法使用集群管理器中当前可用的值刷新所有属性的值(这涉及网络通信)。

Example:
# Update the resident attribute cache of the Batch object with the
# latest values from the cluster manager.
batch.update()
writeJSONSolution(filename)#

此方法返回从集群管理器获取的已完成批处理请求的存储解决方案。解决方案以gzip压缩的JSON文件形式返回。您提供的文件名必须以.json.gz扩展名结尾。JSON格式在JSON解决方案格式部分中描述。请注意,为了使此调用成功,批处理请求的状态必须为COMPLETED。进一步注意,存储在集群管理器端的结果文件必须是gzip压缩的,并且此批处理应仅关联一个结果文件;对于通过API以编程方式提交的批处理,这两者都将成立。请参阅批处理状态代码部分以获取更多详细信息。

Parameters:

filename – 解决方案应存储的文件名(以JSON格式)。

Example:
# Write the full JSON solution string to a file
batch.writeJSONSolution("batch-sol.json.gz")