Julia JUMP Gurobi MIP - 查询并存储最佳目标并在运行时绑定

2024-04-17

我通过 Julia 中的 JuMP 包使用 Gurobi 来解决混合整数程序。

我想获得一个图表像这个 https://i.stack.imgur.com/427LC.png,其中还提供了基于 Python 的解决方案(也已在古罗比社区形式 https://support.gurobi.com/hc/en-us/community/posts/360071330032).

但是,我还没有找到 Julia 通过 JuMP 调用 Gurobi 的可行解决方案。 我知道必须使用回调函数(例如这个建议 https://discourse.julialang.org/t/jump-get-mip-gap-during-optimization/44258甚至是主要文档在这里 https://github.com/jump-dev/Gurobi.jl),但我并不完全理解它们是如何工作的以及实现我的目标所必需的。

非常感谢任何帮助,以及回调函数在每个步骤中执行的操作的可能描述。

如果有帮助,我正在使用 Gurobi (v.9.0.0)、JuMP (v0.20.1)、MathOptInterface (v0.9.22) 和 Julia (v.1.3.0)。


您需要使用 C API。以下是 Eli 在 Gurobi 论坛上的回答的翻译:

using JuMP, Gurobi
model = direct_model(Gurobi.Optimizer())
N = 30
@variable(model, x[1:N], Bin)
@constraint(model, rand(N)' * x  <= 10)
@objective(model, Max, rand(N)' * x)
data = Any[]
start_time = 0.0
function my_callback_function(cb_data, cb_where::Cint)
    @show cb_where
    if cb_where == GRB_CB_MIP
        objbst = Ref{Cdouble}()
        GRBcbget(cb_data, cb_where, GRB_CB_MIP_OBJBST, objbst)
        objbnd = Ref{Cdouble}()
        GRBcbget(cb_data, cb_where, GRB_CB_MIP_OBJBND, objbnd)    
        push!(data, (time() - start_time, objbst[], objbnd[]))
    end
    return
end
MOI.set(model, Gurobi.CallbackFunction(), my_callback_function)
start_time = time()
optimize!(model)
open("data.csv", "w") do io
    for x in data
        println(io, join(x, ", "))
    end
end

附注请更新到 Julia 1.6 和 JuMP 0.22。我还没有测试这是否适用于旧版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Julia JUMP Gurobi MIP - 查询并存储最佳目标并在运行时绑定 的相关文章

  • 如何在 Julia 1.0 中离线安装 julia 包?

    我有自己的 Julia 包 在 Julia 0 6 上运行良好 当我尝试升级到 Julia 1 0 时 我发现在 Julia 1 0 中添加我自己的包更加困难 我不能把它放在 pkg dir 下 在我的情况下 该包只是我本地磁盘上的几个文件
  • 如何在 jQuery 中读取绑定的悬停回调函数

    我使用 jQuery 为页面上的元素设置悬停回调 我现在正在编写一个模块 需要临时为某些元素设置新的悬停行为 新模块无法访问悬停功能的原始代码 我想在设置新的悬停功能之前存储旧的悬停功能 以便在完成临时悬停行为后可以恢复它们 我认为这些可以
  • 类型稳定性如何让 Julia 如此之快?

    我听说类型稳定性使 Julia 如此之快 同时仍然与其他解释语言 例如 Python 一样具有表达能力 类型稳定性允许编译器在编译时直接根据输入类型确定函数的输出类型 因为 Julia 专门针对每种输入类型进行编译 这意味着如果所有函数都是
  • 我可以使用具有固定输入的“map”吗?

    假设我这样做f x y 2x ythen map f 2 4 6 1 1 1 我会得到 3 element Array Int64 1 5 9 13 If I do map f 2 4 6 1 即我想假设第二个输入始终相同 我会得到 1 e
  • 如何在 Kotlin 中编写以下代码来实现回调

    我如何像java一样用Kotlin编写 Callback callback new Callback Override public void getCallback ServerResponse serverResponse var ca
  • 使用 !== 或 != 将 Julia 变量与 `nothing` 进行比较

    在一些 Julia 代码中 何时可以看到条件表达式 例如 if val nothing dosomething end where val是一个类型变量Union Int Nothing 条件有什么区别val nothing and val
  • Julia DataFrames 中的高效自定义排序?

    有没有一种快速的方法来指定自定义订单sort sort 在 Julia 数据框架上 julia gt using DataFrames julia gt srand 1 julia gt df DataFrame x rand 10 y r
  • 带有 varargs 的 Julia @evalpoly 宏

    我正在尝试使用 Julia 的 evalpoly宏 当我手动提供系数时它可以工作 但我一直无法弄清楚如何通过数组提供这些系数 julia gt VERSION v 0 3 5 julia gt evalpoly 0 5 1 2 3 4 3
  • 如何创建并推送到共享或分布式数组数组?

    我编写了 Julia 代码 其中初始化一个空数组 如下所示 a 稍后在代码中 我简单地推送到该数组 如下所示 推 a b 其中 b c d e 是另一个数组 每个 b 可以具有不同的长度 这在非并行化代码中工作得很好 但是 我想在并行代码中
  • Julia:显示函数体(以查找丢失的代码)

    在 R 语言中 我可以声明一个函数并查看函数体 如下所示 gt megafoobar function x return x 10000 gt body megafoobar return x 10000 类似的事情在 Julia 中也可能
  • 如何删除供应商代码插入的回调?

    我正在使用的 gem 插入了一个我想删除的 after save 回调 在我看来 从数组中删除符号比用猴子补丁解决问题更干净 如何访问回调数组 class UserSession lt Authlogic Session Base Don
  • Julia 似乎没有使用字符串来执行插值

    官方文档指出 连接和字符串插值调用string 将对象转换为字符串形式 然而 以下最小工作示例似乎证明了其他情况 type MyType x Int end import Base string Base string m MyType w
  • 有没有办法在 writetable() 中使用字符串作为分隔符 - Julia

    当使用 writetable 将数据帧写入文件时 我希望能够将分隔符设为空格然后逗号 即 作为分隔符 我知道 writetable 只能选择将单个字符作为分隔符参数 是否有可能的解决方法能够将字符串作为分隔符 或者 是否可以简单地在数据框中
  • android在picasso加载后获取Drawable图像

    我正在使用 Picasso 库从 url 加载图像 我使用的代码如下 Picasso with getContext load url placeholder R drawable placeholder error R drawable
  • 如何手动调用(查找)ReCaptcha Callback函数?

    我目前正在尝试验证码解决 并决定使用流行的 2captcha 服务来实现此目的 他们的方法是向他们发送验证码值 谷歌验证码密钥和站点线程 然后他们解决它并向我发回应该发送给谷歌的完成值 以检查验证码是否已解决 我被困在最后一步 使用返回的解
  • 在 Julia 中,有没有办法让“现在”(至少)达到毫秒精度?

    通常 要了解代码中发生的情况 您需要高精度时间来分析您的应用程序或出于其他原因 显然 现在 https stackoverflow com questions 32407509 how to get the milliseconds fro
  • 点击时反应获取id值

    我有以下内容 var SingleEditableModule React createClass show overlay function e console log e target attr id render function v
  • Julia:如何让多个工作人员访问模块中的函数?

    我有以下测试模块 MyMod jl 来在 Julia 中存储一些测试函数 一些核心函数是串行编写的 其他函数并行调用核心函数 module MyMod export Dummy distribute data getfrom recombi
  • Julia 中 @with_kw 和 Base.@kwdef 之间的区别?

    受到这个问题评论的启发 with kw 在 Julia 中做什么 https stackoverflow com questions 69586136 what does with kw do in julia 有什么区别 with kw
  • 如何在一张图中显示多个相邻的图像?

    我正在使用 Julia PyPlot 和 Images 来处理一些图片 因为显示几十个图是不可能的 所以我想堆叠图像 如下所示 我有图像数据Array Array Float64 2 1 已经正常化了 以下代码仅显示最后一个最小的图像 该数

随机推荐

  • 与 Jenkins 工作流程/管道并行运行阶段

    请注意 问题是基于旧的 现在称为 脚本化 管道格式 当使用 声明式管道 时 并行块可以嵌套在阶段块内 请参阅声明式管道 1 2 的并行阶段 https jenkins io blog 2017 09 25 declarative 1 我想知
  • Android 中卡片视图内带有三个点的小部件的名称是什么?

    带有三个点的小部件是什么 如何将其添加到我的应用程序中 这根本不是一个小部件 它是一个ImageButton 无边框风格 使用包含一个的溢出图标PopupMenu 如需文档教程访问http developer android com gui
  • ASP.NET-Core 2.0 在应用程序启动后添加/删除路由

    我需要添加 删除通过 IApplicaitonBuilder 在 Startup 类的 Configure 方法期间注册的自定义路由 启动后 我在 UseMvc 命令中调用 MapRoute 方法 将一堆自定义路由注册到我的控制器 这些路由
  • ListBox不显示绑定数据

    在我的 Xaml 中我有这个
  • 将 Bootstrap 导航栏中的元素居中

    无论我尝试什么 我都无法将 Bootstrap 导航栏中的某些内容居中 有什么解决方案吗 我尝试添加一个div 使用margin 0 auto or margin right auto margin left auto used cente
  • opencv中的矩阵类型转换

    我正在尝试使用滤波器对图像进行卷积 并借助 opencv 中的 filter2D 函数将其存储到 CV 64F 类型的矩阵中 但目标矩阵的类型发生了变化 我尝试借助 allocateTo 0r ConvertTo 函数将其更改回 CV 64
  • 了解随机起始权重对神经网络性能的影响

    使用 R 和包neuralnet 我尝试对数据进行建模 如下所示 这些是几天内以 10 分钟为间隔的温度读数 上面是 2 天的截图 使用下面的代码 我将神经网络拟合到数据 可能有更简单的方法来对这些精确数据进行建模 但将来数据可能看起来完全
  • 无需安装即可使用Python

    我有一个安装程序 它使用 Python 脚本来安装多个组件 我不想在用户计算机上安装 Python 如果用户还没有安装 Python 并且我也不希望安装 Python 成为使用我的安装程序的先决条件 有没有一种方法可以在不使用安装程序的情况
  • 范围之间的随机日期时间 - 不统一输出

    我实现了下面的 RandomDate 但我总是不断获取接近 From 日期的值 我可能在这里错过了一些东西 public static DateTime GetRandomDate DateTime from DateTime to var
  • 为什么矢量化通常比循环更快?

    为什么在执行操作的硬件的最低级别和所涉及的一般底层操作 即 运行代码时所有编程语言的实际实现通用的事情 矢量化通常比循环快得多 计算机在循环时会做什么而在使用矢量化时不会做什么 我指的是计算机执行的实际计算 而不是程序员编写的计算 或者它有
  • ChrisBanes PullToRefresh“正在加载...”问题

    我正在使用我发现的 chrisbanes 的 PullToRefresh ListViewhere https github com chrisbanes Android PullToRefresh 多亏了它的文档 我成功地实现了它 然而
  • 将 Spark Dataframe 保存到 Elasticsearch - 无法处理类型异常

    我设计了一个简单的作业 使用 Spark 从 MySQL 读取数据并将其保存在 Elasticsearch 中 这是代码 JavaSparkContext sc new JavaSparkContext new SparkConf setA
  • Three.js 中的文本几何

    我在 Three js r74 中的 TextGeometry 遇到一些问题 我该如何正确实施 这是我的代码笔 codepen io cheesyeyes pen eJqZxK 提前致谢 好吧 对于每个正在寻找简单答案而不是链接和其他超载示
  • 如何将数组写入 Google 电子表格?

    我正在构建一个具有整数值的数组 并尝试一次性将其写入 Google 电子表格 var myArray new Array for i 1 i lt 100 i myArray i i ss getRange 8 4 1 100 setVal
  • 如何通过连接到 Linux 计算机的 GSM/GPRS 调制解调器发送彩信? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个目录 其中包含 50 个图像
  • 9 补丁填充区域不适用于多个比例区域

    在我的 9 补丁中 我添加了一个填充区域 作为占据红色矩形下方大部分宽度的内容 然而 正如比例图像所示 它不起作用 如果我删除箭头所示的比例区域 那么它就可以完美工作 我做错了什么或者不理解 9 补丁吗 Thanks 我找到了一个相关的答案
  • Rails:form_for复选框设置为true或false,无论该框被选中/取消选中

    我有一个名为 users 的模型 它有 2 个布尔属性send email and send text 我有一个编辑用户模型的表单 我希望它根据该框是否选中 取消选中将这些属性设置为 true false 这是我的表格 div class
  • C# 泛型类型推断与协方差 - bug 或限制

    当具有依赖参数的泛型方法推断类型时 它在某些情况下会给出意外的结果 如果我明确指定类型 则一切都可以正常工作 无需任何进一步的更改 IEnumerable
  • 两个相同的 git 存储库

    我们在一个大团队中使用 git 作为项目的源代码 现在大约有一半的开发商正在离开 进入项目的现场阶段 此阶段将涉及大量开发 即许多提交 同时剩下的另一半也将继续编写代码 不幸的是 现场的互联网连接时断时续且不可靠 然而 至关重要的是 现场团
  • Julia JUMP Gurobi MIP - 查询并存储最佳目标并在运行时绑定

    我通过 Julia 中的 JuMP 包使用 Gurobi 来解决混合整数程序 我想获得一个图表像这个 https i stack imgur com 427LC png 其中还提供了基于 Python 的解决方案 也已在古罗比社区形式 ht