首页>软件资讯>常见问题

常见问题

gurobi求解器软件介绍

发布时间:2026-04-23 09:14:21人气:3

介绍

Gurobi优化产品套件包括用于线性规划(LP)和二次规划(QP)的最先进的单纯形和并行障碍求解器、用于二次约束规划的并行障碍求解器(QCP),以及并行混合整数线性规划(MILP)、混合整数二次规划(MIQP)、混合整数二次约束规划(MIQCP)和(混合整数)非线性规划(NLP)求解器。


Gurobi MIP解决方案包括共享内存并行,能够同时利用任意数量的处理器和每个处理器的内核。实现是确定性的:在同一个模型上的两次单独运行将产生相同的解决方案路径。


虽然有许多解决方案可供选择,但Gurobi会自动计算并为特定问题设置最佳值的大多数选项。本章末尾总结了通过GAMS/古罗比可获得的所有古罗比选项。


我们提供GAMS/古罗比-林克许可证它与Gurobi Optimization Inc .的Gurobi callable库许可证结合使用。


注意力

当用户拥有单独的GUROBI许可证时,允许解决LP和MIP的免费裸机链接模式(以前为GAMS/OSIGUROBI)已被删除。如果您依赖于使用这种基本链接选项,请联系sales@gams.com去申请GAMS/古罗比-林克的执照。

如何使用Gurobi运行模型

可以在GAMS程序中使用以下语句来指定使用Gurobi


选项LP = Gurobi{或MIP或r MIP或QCP或MIQCP或RMIQCP }

上述语句应该出现在解决声明。如果Gurobi在GAMS安装期间被指定为默认解算器,则上述语句是不必要的。


GAMS/古罗比概述

线性、二次和二次约束规划

Gurobi可以使用几种替代算法来解决LP和凸QP问题,而解决凸QCP的唯一选择是并行屏障算法。大多数LP问题使用Gurobi的最新对偶单纯形算法解决得最好,而大多数凸QP问题使用平行障碍算法解决得最好。某些类型的LP问题受益于使用并行障碍或原始单纯形算法,而对于某些类型的QP,对偶或原始单纯形算法可能是更好的选择。如果您在多核系统上解决LP问题,您还应该考虑使用并发优化器。它在不同的内核上运行不同的优化算法,并在第一个内核完成时返回。


also古罗比也提供了古罗比不可行性查找工具。不可行查找器采用不可行的线性程序,并产生不可约的不一致的约束集(IIS)。IIS是约束和可变边界的集合,它是不可行的,但如果集合中的任何一个成员被删除,它就会变得可行。GAMS/古罗比根据GAMS方程和变量名报告IIS,并将IIS报告作为常规解决方案列表的一部分。不可行性探测器由选项激活(同ImmigrationInspectors移民检查)。分析不可行模型的另一个选择是FeasOpt指示GAMS/古罗比寻找不可行模型的最小可行松弛的选项。参见第节可行松弛详情请见。


GAMS/古罗比支持线性规划的灵敏度分析(后优化分析),它允许人们找到更多关于问题最优解的信息。特别地,目标测距和约束测距给出了关于在不改变最优基的情况下目标系数或右手侧和可变边界可以改变多少的信息。换句话说,它们给出了最优基对目标函数或边界和右侧的变化有多敏感的信息。GAMS/古罗比将敏感性信息作为正常解决方案列表的一部分进行报告。灵敏度分析由选项激活灵敏度。


Gurobi预解有时可以诊断出一个不可行的问题或者无界。发生这种情况时,为了获得更好的诊断信息,GAMS/古罗比可以在关闭预解的情况下重新运行该问题。没有预溶解的重新运行由选项控制再放映。在默认模式下,只有小问题(即演示大小的问题)才会重新运行。


Gurobi既可以预解模型,也可以从高级基础或原始/对偶解对开始。通常,预求解模型的从头求解优于从高级基础/解决方案开始的未求解模型的求解。不可能先验地确定预解或从没有预解的给定高级基础/解决方案开始会更快。默认情况下,GAMS/古罗比将自动使用以前版本的高级基础或解决方案解决声明。GAMS布拉西奥选项可用于指定何时不使用高级基础/解决方案。GAMS/古罗比选项使用基础可用于忽略或强制GAMS传递的基础/解决方案(它覆盖布拉西奥).如果连续多次求解,并且第二次和后续求解执行缓慢,建议用户设置GAMS布拉西奥选项为1。



混合整数规划

用于解决纯整数和混合整数规划问题的方法比类似规模的纯线性或二次规划需要更多的数学计算。许多相对较小的整数规划模型需要花费大量的时间来求解。


对于离散变量的问题,古罗比使用分支切割算法来解决一系列子问题,MILP的LP子问题,MIQP的QP子问题,MIQCP的QCP子问题或LP外近似子问题。因为一个混合整数问题会产生许多子问题,所以即使是很小的混合整数问题也会是计算密集型的,并且需要大量的物理内存。带选项非凸的Gurobi还可以使用空间分支定界法解决非凸(MI)QP和(MI)QCP问题。


GAMS/古罗比支持类型1和类型2的特殊顺序集,以及半连续和半整数变量。


您可以提供一个已知的解决方案(例如,根据以前解决的MIP问题或您对该问题的了解)作为第一个整数解决方案。


如果您为离散变量指定了部分或全部值以及GAMS/古罗比选项MipStart,Gurobi将检查作为整数可行解的值的有效性。如果此过程成功,解决方案将被视为当前问题的整数解决方案。


Gurobi MIP解决方案包括共享内存并行,能够同时利用任意数量的处理器和每个处理器的内核。实现是确定性的:在同一个模型上的两次单独运行将产生相同的解决方案路径。


非线性规划

GAMS/古罗比主要使用古罗比的非线性函数接口。如果不可能通过该接口传递约束(或者如果特里农林被禁用),GAMS/古罗比尝试古罗比的其他一般约束。对于前者,约束不需要任何特殊形式,但必须包含Gurobi非线性接口支持的函数。对于后者,约束必须是下面列出的任何形式。


最大约束:

eq1..r =e= max(x1,x2,x3,...,c);eq2..r =e= smax(i,x(I));

最小约束:

eq1..r =e= min(x1,x2,x3,...,c);eq2..r =e= smin(i,x(I));

和约束:

eq1..r =e= b1和b2和b3和...;eq2..r =e= sand(i,b(I));

或约束:

eq1..r =e= b1或b2或b3或...;eq2..r =e= sor(i,b(I));

ABS约束:

情商..r = e = ABS(x);

EXP约束:

eq1..r = e = exp(x);eq2..r = e = x * * a;eq3..r = e = a * * x;

这里,a %3E 0对于eq3的下界x必须是非负的。

日志约束:

eq1..r = e = log(x);eq2..r = e = log2(x);eq3..r = e = log10(x);

正弦/余弦/正切约束:

eq1..r = e = sin(x);eq2..r = e = cos(x);eq3..r = e = tan(x);

规范约束:

eq1_1..r =e= sum(i,ABS(x(I)));eq1_2..r = e = ABS(x1)+ABS(x2)+ABS(x3)+ABS(x4);eq2_1..r =e= edist(x1,x2,x3,...);eq2_2..r =e= sqrt(sum(i,sqr(x(I))));eq2_3..r = e = sqrt(sqr(x1)+sqr(x2)+sqr(x3)+sqr(x4));eq3_1..r =e= smax(i,ABS(x(I));eq3_2..r =e= max(abs(x1),abs(x2),abs(x3),ABS(x4));

注意,2-范数约束可以导致非凸二次模型,其比凸二次或线性模型更难求解。

多边形约束:

情商..r =e= poly(x,a0,a1,a2,...);

SIGMOID约束:

eq1..r = e = sigmoid(x);eq2..r = e = 1/(1+exp(-x));

Gurobi可以直接或通过用分段线性函数近似模型和/或将非线性约束重新表述为支持的线性和/或二次约束来求解(混合整数)非线性规划的全局最优性(参见函数非线性。)



可行松弛

不可行性查找器通过不一致的约束集(IIS)来识别不可行性的原因。但是,您可能希望超越诊断,对模型进行自动修正,然后继续提供解决方案。这样做的一种方法是用显式的松弛变量和其他建模结构来构建模型,这样就不会出现不可行的结果。GAMS/古罗比提供的自动化方法被称为FeasOpt(可行优化),由参数启动FeasOpt在GAMS/古罗比选项文件里。


使用FeasOpt选项,GAMS/古罗比接受不可行模型,并以最小化加权罚函数的方式选择性地放松边界和约束。本质上,可行的放松试图提出实现可行性的最小变化。它向GAMS返回一个不可行的解决方案,并在清单文件的解决方案部分用INFES标记来标记边界和约束的放宽。


默认情况下,所有方程都是松弛的候选方程,并且权重相等,但是没有一个变量可以松弛。这种默认行为可以通过将松弛首选项分配给可变边界和约束来修改。这些首选项可以方便地用。feaspref选项。输入值表示用户放松约束或限制的意愿。偏好越大,就越有可能放松给定的界限或约束。更准确地说,指定值的倒数用于衡量该约束或界限的放松程度。用户可以指定小于或等于0(零)的偏好值,这表示相应的约束或界限不能放松。没有必要为每个界限或范围指定唯一的首选项。事实上,习惯上只使用值0(零)和1(一),除非您对问题的了解建议指定明确的首选项。


可以使用通过GAMS/古罗比解算器选项文件指定首选项圆点选项。语法是:


(变量或方程)。feaspref(值)


例如,假设我们有一个GAMS宣言:


设置I/i1 * i5/;设置j/J2 * j4/;变量v(i,j);方程e(i,j);

然后,放松偏好在gurobi.opt文件可以通过以下方式指定:


feas opt 1v . feas pref 1v . feas pref(' i1 ',*) 2v.feaspref('i1 ',' j2') 0e.feaspref(*,' j1') 0e.feaspref('i5 ',' j4') 2

首先,我们打开可行的放松。此外,我们指定所有变量v(i,j)优先选择1,变量优先于集合元素i1,其优先级为2。集合元素上的变量i1和j2具有首选项0。请注意,首选项是以程序方式分配的,因此稍后分配的首选项会覆盖先前的首选项。如上所述,相同的语法适用于将偏好分配给方程。如果要为模型中的所有变量或方程指定一个首选项,请使用关键字变量或者方程式代替单独的变量和方程名称(例如变量. feaspref 1).


参数FeasOptMode允许不同的策略在一个或两个阶段中找到可行的放松。在第一阶段,它试图最小化不可行模型的松弛。也就是说,它试图找到一个可行的解决方案,需要最小的变化。在第二阶段,它在那些只需要与第一阶段一样多的放松的方案中找到一个最优方案(使用原始目标)。参数值FeasOptMode指出两个方面:(1)是在第一阶段停止还是继续第二阶段,以及(2)如何测量松弛(作为总和所需的放松;作为数字需要放松的约束和界限;作为一个平方和所需的松弛)。请检查参数的描述FeasOptMode详情请见。还要检查示例模型feasopt*在GAMS模型库中。



参数调整工具

Gurobi优化器提供了各种各样的参数,允许您控制优化引擎的操作。控制级别从非常粗粒度的(例如方法参数,它允许您选择用于求解连续模型的算法)到非常细粒度的(例如马科维茨托尔参数,该参数允许您调整单纯形基因式分解过程中使用的精确公差)。虽然这些参数提供了大量的用户控制,但当您搜索参数设置以提高特定模型的性能时,可能选项的巨大空间会带来巨大的挑战。Gurobi调优工具的目的是使这种搜索自动化。


Gurobi调整工具在模型上执行多个解算,为每个解算选择不同的参数设置,以搜索提高运行时间的设置。你让它运行的时间越长,它就越有可能找到显著的改进。


许多与调优相关的参数允许您控制调优工具的操作。最重要的大概是TuneTimeLimit,它控制搜索改进参数集所花费的时间。其他参数包括调谐试验(试图限制随机性对结果的影响),调谐结果(这限制了返回结果的数量),以及调谐输出(它控制工具产生的输出量)。


虽然参数设置会对许多模型产生很大的性能影响,但它们并不能解决所有的性能问题。一个简单的原因是,有许多模型,即使参数设置的最佳选择也不会产生可接受的结果。一些模型太大和/或很难解决,而另一些模型可能存在无法通过改变参数来解决的数值问题。


自动调优的另一个限制是,由于随机效应(特别是对于MIP模型),模型的性能可能会有很大的变化。这就是搜索的本质。古罗比算法经常不得不从多个同样吸引人的选项中做出选择。对模型进行看似无害的更改(例如更改约束或变量的顺序),或者对算法进行细微的更改(例如修改随机数种子)都会导致不同的选择。很多时候,以不同的方式打破单一的束缚会导致完全不同的搜索。我们已经看到搜索中的细微变化会产生100倍的性能波动。虽然调优工具试图限制这些效应的影响,但最终结果通常仍会受到这些问题的严重影响。


底线是,自动化性能调优意味着为参数提供建议,这些参数可以对您的模型产生一致、可靠的改进。它并不意味着可以替代高效的建模或仔细的性能测试。



计算服务器

Gurobi计算服务器允许您使用一个或多个服务器来卸载您的所有Gurobi计算。


Gurobi计算服务器支持排队和负载平衡。您可以对每台计算服务器同时运行的作业数量进行限制。当达到此限制时,后续作业将排队。如果您有多台计算服务器,当前作业负载会在可用的服务器之间自动平衡。默认情况下,Gurobi作业队列以先进先出(FIFO)的方式提供服务。然而,作业可以被赋予不同的优先级。然后,在优先级较低的作业之前,从队列中选择优先级较高的作业。


Gurobi计算服务器许可证和软件不包括在GAMS/Gurobi中。直接联系Gurobi询问软件和许可证。



分布式并行算法

Gurobi Optimizer实现了许多分布式算法,允许您使用多台机器来更快地解决问题。可用的分布式算法有:


A分布式MIP求解器,它允许您将解决单个MIP模型的工作分配给多台机器。管理机将问题数据传递给一组工作机,以便协调整个解决过程。

A分布式并行求解器,它允许您使用多台机器来解决LP或MIP模型。与分布式MIP求解器不同,并发求解器不在机器之间分配与求解问题相关的工作。相反,每台机器使用不同的策略来解决整个问题,希望其中一个策略特别有效,并且比其他策略早得多完成。对于某些问题,这种并行的方法可能比试图分割工作更有效。

分布式参数调谐,它会自动搜索可提高优化模型性能的参数设置。调整使用各种参数设置来求解模型,测量每个设置获得的性能,然后使用结果来确定产生最佳整体性能的设置。分布式版本的调优在多台机器上执行这些试验,这使得整个调优过程运行得更快。

这些分布式并行算法被设计成对用户几乎完全透明。用户只需修改几个参数,将计算分配给多台机器的工作由Gurobi在幕后处理。


指定工作池

一旦您设置了一个或多个分布式工作人员的集合,您应该在工人池参数。您可以提供机器名或IP地址,它们应该用逗号分隔。


您可以通过工人口令参数。工作池中的所有服务器必须具有相同的访问密码。


请求分布式算法

一旦通过适当的参数设置了工作池,使用分布式算法的最后一步就是设置TuneJobs,兼职工作,或者分布式作业参数。这些参数用于指示应该在可用的工作线程上启动多少个不同的调优、并发或分布式MIP作业。


如果在您启动分布式算法时,您的工作线程池中的一些工作线程正在满负荷运行,则该算法不会创建排队作业。相反,它将启动尽可能多的作业(达到请求的值),并与这些作业一起运行。


这些分布式算法被设计成与单机版本几乎没有区别。我们希望,如果你知道如何使用单机版,你会发现使用分布式版本很简单。分布式算法考虑了所有常见的参数。对于分布式MIP,可以调整策略、调整容差、设置限制等。对于并发MIP,您可以允许Gurobi为每台机器自动选择设置或指定一组选项。对于分布式优化,您可以使用常用的优化参数,包括TuneTimeLimit,TuneTrails,以及调谐输出。


不过,在使用分布式算法时,有一些事情需要注意。一个与相对机器性能有关。如果所有的工人都给出非常相似的性能,分布式算法工作得最好。例如,如果在分布式优化运行中,您的工作池中的一台机器比其他机器慢得多,那么在较慢的机器上测试的任何参数集都不如在较快的机器上运行的有效。类似的考虑也适用于分布式MIP和分布式并发。我们强烈建议您使用性能非常相似的机器。请注意,如果您的计算机具有相似的性能内核但内核数量不同,我们建议您使用线参数来确保所有机器都使用相同数量的核心。


分布式MIP的日志记录非常类似于标准的MIP日志记录。主要区别在进度部分。标准MIP日志的标题如下所示:


节点|当前节点|目标界限|工作展开未展开|目标深度未展开|现任最佳差距| It/节点时间

相比之下,分布式MIP标头如下所示:


节点|当前节点|目标界限|工作展开未展开|目标深度包含|现任最佳差距|实际时间

分布式日志中的最后一个字段显示并行利用率,而不是显示每个节点的迭代次数。具体来说,它显示了先前时间段(自上一个进度日志行以来的时间)中工作线程主动处理MIP节点所花费的时间。


以下是一个分布式MIP进度日志的示例:


节点|利用率|目标界限|工作支出未支出|目标深度未支出|现任最佳差距| ParUtil time h 0 157344.61033--0sH 0 40707.729144--0sH 0 28468.534497--0sH 0 18150.083886--0sH 0 14372.871258--0sH 0 13725.475382--0s 0 3360 12234.641804 10641.4586 13.0% 1sH 3870 11801.185729 10641.4586 9.83% 1上升阶段完成-继续实例2(最佳bd 10661) 16928 2731 10660.9626 0 12 11801.1857 10660.9635 9.66% 99% 2s 135654 57117 11226.5449 19 12 11801.1857 111042.3036 6.43% 98% 5s 388736 1354

您可能会在进度部分发现,节点计数可能不会单调增加。分布式MIP试图创建一个单一的、统一的节点编号视图,但是由于多台机器可能以不同的速率独立地处理节点,一些不一致是不可避免的。


另一个区别是指示分布式上升阶段完成的线。此时,分布式策略从并发方法转变为分布式方法。日志行指示哪个工人在并发方法中胜出。分布式MIP通过在所有工作者之间划分来自该工作者的部分探索的MIP搜索树来继续。


分布式日志的另一个不同之处在于摘要部分。分布式MIP日志包括运行时间消耗的明细:


运行时故障:活动:37.85秒(93%),同步:2.43秒(6%),通信:0.34秒(1%)

这是进度日志行中显示的利用率数据的汇总视图。在这个例子中,工作人员花费93%的运行时间在MIP节点上工作,6%等待与其他工作人员同步,1%在机器之间通信数据。


Gurobi远程服务的安装说明可以在Gurobi的网页[www.gurobi.com](https://www.gurobi.com).


古罗比即时云

建立自己的机器池的另一种方法是使用古罗比即时云。当您在Gurobi即时云解决问题时,您只需要一个GAMS/Gurobi链接许可证。Gurobi许可证的费用按每次使用直接支付给Gurobi。如果您遵循Gurobi网站上的步骤,您最终会获得Gurobi在云中为您启动的机器的名称。为了使用这些来自GAMS/古罗比的机器,你需要提供一个带有古罗比即时云访问说明的古罗比许可证(配置客户端许可证文件的详细说明).


解决方案池

虽然Gurobi优化器的默认目标是为您的模型找到一个经过验证的最佳解决方案,但在此过程中可能会有找到其他解决方案的副作用,求解器提供了许多允许您更改此行为的参数。


默认情况下,Gurobi MIP解算器将尝试为您的模型找到一个经过验证的最优解。它通常会在这个过程中找到多个次优解,这些次优解可以在以后检索。然而,这些解决方案并不是以系统的方式产生的。找到的解决方案集取决于求解器在MIP搜索中采用的确切路径。您可以一次解决一个MIP模型,获得一组有趣的次优解,然后用不同的参数设置再次解决相同的问题,并且只找到最优解。


要存储沿途找到的(一些)解决方案,您可以通过设置选项来启用解决方案池功能索伦波尔。如果您希望对如何找到和保留解决方案有更多的控制,Gurobi优化器为此提供了许多参数。第一个也是最简单的是pool解决方案,它控制解决方案池的大小。改变这个参数不会影响找到的解的数量——它只是决定了保留的解的数量。


您可以使用PoolSearchMode参数来控制用于查找解决方案的方法。在其默认设置(0)中,MIP搜索只是为了找到一个最优解。将参数设置为1会导致MIP搜索花费额外的努力来寻找更多的解,但是以非系统的方式。你会得到更多的解,但不一定是最好的解。将参数设置为2会导致MIP对n个最佳解决方案进行系统搜索。对于这两种非默认设置pool解决方案参数设置要查找的解决方案数量的目标。


如果您只对与找到的最佳解决方案有一定差距的解决方案感兴趣,您可以将PoolGap参数。不在指定间隙内的解决方案将被丢弃。


当使用PoolSearchMode=2时,获得最佳优化返回状态表明MIP求解器成功地找到了所需数量的最佳解决方案,或者它证明模型没有那么多不同的可行解决方案。如果求解程序提前终止(例如,由于时间限制),您PoolObjBound属性(打印到日志中)来评估找到的解决方案的质量。此属性给出了不在解决方案池中的任何解决方案的目标界限。该属性与ObjBound的区别在于,后者给出了任何解决方案的目标界限,并且通常比PoolObjBound更宽松。这PoolObjBound属性为未发现的解决方案的目标提供了一个界限。进一步的树探索不会找到更好的解决方案。您可以使用这个界限来计算您找到的n个最佳解决方案中有多少个:目标值至少与PoolObjBound属于n最好的。


解决方案池示例

让我们继续看几个如何使用这些参数的例子。假设您正在求解一个MIP模型,其最优(最小化)目标为100。进一步设想,使用默认设置,MIP求解器找到目标为100、110、120和130的该模型的四个解。


如果设置了pool解决方案参数设置为3并再次求解模型,MIP求解器将丢弃最差的解,并返回解池中的3个解。如果改为设置PoolGap参数值为0.2,MIP解算器将丢弃任何目标值小于120的解(这也将在解池中留下3个解)。


如果设置了PoolSearchMode参数设置为2,而pool解决方案参数设置为10,MIP求解器将试图找到模型的10个最佳解。最佳回报状态将指示(I)它找到了10个最佳解决方案,或者(ii)它找到了模型的所有可行解决方案,并且少于10个。如果您还设置了PoolGap参数设置为0.1,MIP解算器将试图找到10个目标不差于110的解。虽然这可能看起来相当于要求10个解决方案并简单地忽略那些目标差于110的解决方案,但使用此参数集求解通常会更快地完成,因为求解程序不必花费精力寻找超出所要求的差距的解决方案。


解决方案池的微妙之处

我们现在将讨论与寻找多种解决方案相关的一些微妙之处。


连续变量


当考虑具有连续变量的模型的多重解时,一个微妙之处出现了。具体来说,你可能有两个解决方案,它们对整数变量取相同的值,但有些连续变量不同。通过在这两种解决方案之间的线上选择不同的点,你实际上对问题的可行解决方案有无限多的选择。为了避免这个问题,我们将两个解定义为等价的,如果它们在所有整数变量(以及参与SOS约束的所有连续变量)上取相同的值。如果某个解决方案等同于池中已有的另一个解决方案,则该解决方案将被丢弃。


最佳差距


最优差距(MIPGap或者MIPGapAbs)而多解可能有点微妙。当使用默认值时PoolSearchMode非零最优差距表示您愿意允许MIP求解器宣布一个最优解,即使该模型可能有其他更好的解。求解程序在终止时的声明是,没有其他解决方案会将现任目标提高超过最优差距。在这一点上终止最终是一个务实的选择——我们可能更愿意拥有真正的最佳解决方案,但是将最优差距减小到零的成本通常会令人望而却步。


在寻找多个最优解时,这种务实的选择可能会产生一点混乱。具体来说,如果您要求n个最佳解决方案,最优性差距扮演着与默认情况下类似的角色,但其含义可能有点难以理解。具体来说,非零优化差距意味着您愿意允许求解程序宣布它已经找到了n个最佳解决方案,即使可能有比返回的解决方案更好的解决方案。这种情况下的主张是,任何解决方案都不在报道之列n最佳将对n个最佳中最差的目标的改进小于最佳差距。


如果您想避免这种潜在的混淆,您应该在使用PoolSearchMode=2。


伐木


如果您浏览MIP求解的日志,请使用PoolSearchMode设置为非默认值,您可能会看到物镜的下限超过了上限。默认情况下不会发生这种情况PoolSearchMode-如果只寻找一个最优解,则下限一达到上限,搜索就立即进行。但是,如果你在寻找n个最佳解,你必须证明这个模型没有比第n个更好的解。第n个解决方案目标可能比现任者的目标差得多。在这种情况下,日志文件将包括以下形式的一行:


在节点123找到最佳解决方案-现在完成解决方案池...

分布式MIP


我们应该指出的与多个解决方案相关的一个限制是,分布式MIP解算器没有扩展到支持非默认PoolSearchMode设置。分布式MIP通常会比非分布式MIP产生更多可行的解决方案,但是没有办法要求它找到n个最佳解决方案。


多重目标

虽然典型的优化模型只有一个目标函数,但现实世界中的优化问题通常有多个相互竞争的目标。例如,在生产计划模型中,您可能希望最大化利润并最小化延迟订单,或者在劳动力调度应用程序中,您可能希望在尊重员工的班次偏好的同时最小化人手不足的班次。


在处理多个相互竞争的目标时,您面临的主要挑战是决定如何管理它们之间的权衡。Gurobi提供了简化任务的工具:Gurobi允许你混合多个目标,来对待它们分等级地,或者将这两种方法结合起来。在混合方法中,您可以优化单个目标的加权组合。在分层或词典编辑的方法,您为每个目标设置一个优先级,并按优先级顺序进行优化。当优化一个目标时,您只考虑不会降低更高优先级目标的目标值的解决方案。Gurobi允许您输入和管理您的目标,为混合方法提供权重,或为分层方法设置优先级。Gurobi只会解决具有严格线性目标的多目标模型。此外,对于连续模型,Gurobi将报告一个原始的唯一解决方案(而不是对偶信息)。


在劳动力应用程序之后,将按如下方式指定目标:


方程式defObj,defNumShifts,defSumPreferences变量obj,numShifts,sumPreferencesdefobj..obj = e = num shifts-1/100 * sum preferences;defNumShifts..numShifts =e=...;defsum首选项..sumPreferences =e=...;模范员工/所有人/;使用mip解决劳动力最小化问题;

使用默认设置,GUROBI将解决混合目标。使用参数MultObj古罗比将使用等级方法。分层或字典式方法为每个目标分配一个优先级,并按照优先级递减的顺序对目标进行优化。在每一步中,它都会为当前目标找到最佳解决方案,但是只能从那些不会降低更高优先级目标的解决方案质量的解决方案中选择。优先级由混合目标函数中的目标系数的绝对值指定(defObj).在该示例中数字转移系数为1的目标比sum首选项绝对客观系数为1/100的客观。目标系数的符号决定了特定目标函数的方向。所以在这里数字转移将最小化(与上的方向相同解决语句)而sum首选项会被最大化。GAMS需要确定各种目标函数,因此目标变量只能出现在混合目标函数和特定的目标定义方程中。


默认情况下,分级方法不允许后面的目标降低前面的目标。这种行为可以通过一对属性来缓解:ObjNRelTol和ObjNAbsTol。通过为特定目标设置其中之一,您可以指示允许后面的目标按指定的相对量或绝对量分别降低该目标。在我们前面的例子中,如果数字转移是100,如果我们设定ObjNAbsTol对于这个目标为20,那么第二个优化步骤最大化sum首选项将从目标为120或更好的所有解决方案中找到第二个目标的最佳解决方案数字转移。请注意,如果修改两个容差,以后的优化将使用两个值中较宽松的一个(即允许较大降级的那个)。


GPU上的原始对偶混合梯度算法

Gurobi为PDHG算法提供了GPU支持。它可以通过设置来启用pdhggpu到1。使用此功能需要一个特定的共享库,它不包含在标准GAMS安装包中,以保持较小的分发空间。


下载和安装:


为您的系统下载专用库:

guro bi ARM 64位Linux CUDA 12

guro bi ARM 64位Linux CUDA 13

guro bi x86 64位Linux CUDA 12

guro bi x86 64位Linux CUDA 13

要安装,请更换现有的libgurobi.so.13.0.1在你的GAMS系统目录里有你刚刚下载的版本。

GAMS期权

GAMS/古罗比使用以下GAMS选项:


option BRatio = x;


确定是否使用高级基准。值为1.0会导致GAMS指示古罗比不要使用高级基准。值为0.0会导致GAMS从任何可用的信息构建基础。如果之前已经执行了solve语句,默认值0.25几乎总是会导致GAMS传递高级基础。该GAMS选项被GAMS/古罗比选项覆盖使用基础


option ITER lim = n;


设置单纯形迭代极限。单纯形算法将终止并将当前解传递给GAMS。对于MIP问题,如果累计单纯形迭代次数超过极限,Gurobi将终止。该GAMS选项被GAMS/古罗比选项覆盖迭代限制


option no dlim = x;


处理一个MIP问题的最大节点数。该GAMS选项被GAMS/古罗比选项覆盖节点限制。


option OptCA = x;


一个MIP问题的绝对最优性准则。OptCA选项要求Gurobi在以下情况下停止


\ begin { equation * } | BP-BF | % 3C \ mbox { OptCA } \ end { equation * }


在哪里男友是当前最佳整数解的目标函数值,而碱基对是可能的最佳整数解。该GAMS选项被GAMS/古罗比选项覆盖MipGapAbs。


option OptCR = x;


一个MIP问题的相对最优性准则。请注意,古罗比使用了不同于GAMS通常使用的定义。OptCR选项要求Gurobi在以下情况下停止


\ begin { equation * } | BP-BF | % 3C | BF | * \ mbox { OptCR } \ end { equation * }


在哪里男友是当前最佳整数解的目标函数值,而碱基对是可能的最佳整数解。GAMS的定义是:


\ begin { equation * } | BP-BF | % 3C | BP | * \ mbox { OptCR } \ end { equation * }


该GAMS选项被GAMS/古罗比选项覆盖MipGap。


选项RES lim = x;


以秒为单位设置时间限制。该算法将终止并将当前解传递给GAMS。Gurobi测量所有平台上的时间。在某些Unix系统上,其他一些GAMS解算器用CPU时间来度量时间。如果resLim采用其默认值(1e+10),Gurobi将使用自己的默认值(无穷大)。该GAMS选项被GAMS/古罗比选项覆盖时限。


选项SysOut = On


会将Gurobi消息回显到GAMS列表文件中。如果求解器失败,此选项可能会很有用。


型号名称。截止= x;


截止值。当分支定界搜索开始时,目标比x差的树的部分被删除。这有时可以加速分支定界算法的初始阶段。该GAMS选项被GAMS/古罗比选项覆盖近路。


型号名称。opt file = 1;


指示GAMS/古罗比读取选项文件。选项文件的名称是gurobi.opt。


型号名称。prior opt = 1;


指示GAMS/古罗比使用GAMS通过可变后缀值传递的优先级分支信息可变的。在先的;在前的。



上一条:Gurobi新版非线性约束API建模技巧

下一条:数学建模gurobi