Programming languages 编程语言建议-动态多维数组-cplex或gurobi

Programming languages 编程语言建议-动态多维数组-cplex或gurobi,programming-languages,dynamic-arrays,cplex,gurobi,Programming Languages,Dynamic Arrays,Cplex,Gurobi,目前我一直在使用MATLAB来解决我一直在处理的问题。在我的MATLAB代码中,我调用CPlex或GUROBI解算器来解决大型线性规划问题。在我的MATLAB代码的每次调用中,CPlex或GUROBI被调用10^5次以上。这会导致很高的计算量,并且需要太多的时间来解决更大的问题。但是,我想切换到另一种编程语言 能够调用其中一个(CPlex或GUROBI) 能够调用其中一个解算器(CPlex或GUROBI)太多次(比如说10^6次),每次调用都不会显著降低性能,也不会显著增加运行时间 能够使用动

目前我一直在使用MATLAB来解决我一直在处理的问题。在我的MATLAB代码中,我调用CPlex或GUROBI解算器来解决大型线性规划问题。在我的MATLAB代码的每次调用中,CPlex或GUROBI被调用10^5次以上。这会导致很高的计算量,并且需要太多的时间来解决更大的问题。但是,我想切换到另一种编程语言

  • 能够调用其中一个(CPlex或GUROBI)
  • 能够调用其中一个解算器(CPlex或GUROBI)太多次(比如说10^6次),每次调用都不会显著降低性能,也不会显著增加运行时间
  • 能够使用动态数组(即,当我运行代码时,它将获得一些用户参数,并在每次运行中定义不同大小的矩阵)
  • 能够定义多维数组,而不是数组数组
在这一点上,我找到了三个选择

  • Fortran:看起来还可以,但我担心它是否能够有效地调用太多次解算器。看来我只能用带有Cplex的Fortran。我在谷歌上搜索了Fortran+GUROBI,但结果并不令人鼓舞

  • Visual Basic.NET:似乎可以使用Visual Basic调用Cplex和GUROBI,但我不确定性能如何

  • Python:都可以与CPlex和GUROBI集成


  • 最后,我请你提出进一步的建议。我的首选是从一种编程语言开始,在这种语言中可以同时使用GUROBI和CPlex 所罗门

    (www.pyomo.org)“……是一个基于Python的开放源码软件包,支持各种优化功能,用于制定和分析优化模型。”因此,您可以使用Python构造来帮助构建模型。在构建模型之后,您可以在gurobi、cplex和更多设备上运行它。由于解算器只是solve函数中的一个参数,在这两个函数中运行它只是一个单词的区别。下面是一个简单的例子

    # model.py
    from __future__ import division
    from pyomo.environ import *
    
    model = ConcreteModel()
    
    model.x = Var([1,2], domain=NonNegativeReals)
    
    model.OBJ = Objective(expr = 2 * model.x[1] + 3 * model.x[2])
    
    model.Constraint1 = Constraint(expr=3 * model.x[1] + 4 * model.x[2] >= 1)
    
    从命令行,您可以解决

    pyomo solve model.py --solver=gurobi
    


    您也可以使用脚本来解决它。这是一个极限,也是一个伟大的极限。

    我可以从古罗比的网站上看到它支持C。有了C和fortran之间的互操作性,你们都已经准备好了!当代码设计良好时,C和fortran都能让您获得最佳性能。据我所知,应该没有性能问题。根据我自己的经验,我到目前为止没有任何问题。我通常用C写什么用C容易写什么用fortran容易写什么用fortran让编译器和链接器完成剩下的工作。到目前为止,其他的选择可能是C++,它的效率几乎和C一样高,但是在顶部添加了很多面向对象的东西,这有助于代码结构。C和C++都需要你注意内存管理,即分配和释放内存,但是额外的控制级别也能使你获得效率。其他有效的选择是C#和Python。C#实际上相当好,效率很高,并且可以自动管理内存。Visual Studio很好。我还没有使用Python,但预期效率会更低。我永远不会使用VisualBasic——我从来没有让它工作得很好。好吧,我承认我夸大了Fortran的消亡。我用了很多,现在仍然很喜欢。Fortran中已经有大量非常好的代码,对于物理研究和类似领域的许多人来说,这是显而易见的选择(我知道,我有计算物理博士学位)。但是,如果我正在编写一个商业或商业系统,它将不是我的第一选择。如果我是编程新手并且刚开始工作,我会再次寻找另一种语言。C语言(C语言,java语言,C++语言)中的一种更可能让你获得重用技能,并被更多的人理解。稍微偏离主题的咆哮,请,任何对真正理解编程感兴趣的人,应该看看各种语言,尤其是FORTRAN语言。这门语言已经有50多年的历史了,仍然很强大和有用。许多现代语言很可能早在它们变老之前就已经死了并被埋葬了。显然Fortran做了一些正确的事情。Lisp也是如此。任何只懂一种语言的人可能都不知道如何编程@innoSPG-感谢您支持Fortran。这不是一条死胡同,只是目前在使用上有点利基。你有没有尝试过Pyomo与商业/学术解决方案(尤其是CPlex或Gurobi)合作?如果你这么做了,我真的很想看看你的经历。在CPlex或GUROBI文档中,我从来没有读过关于Pyomo的内容。听起来很有趣。我要找毕莫。谢谢。我一直在用它来处理Gurobi,我在CPlex上也用过几次(Gurobi更适合我的问题类型)。我真的很喜欢,太棒了。我试试python和pyomo。我还有一个问题。为什么您更喜欢Python而不是C和C派生编程语言?我这样问是因为一些C用户担心Python的性能。谢谢。Python在探索性编程的易用性方面肯定会有一些优势。这是一门地道的现代语言,有很多简洁、聪明的特点,我需要找时间好好学习。当然也可以确定C或C++中的一个正确编程的解决方案会比Python等效,特别是一百万次。但是,这是一种有意识的权衡。您需要做的事情可能更容易用Python编程,这非常重要。你甚至可以用Python编写它来解决问题,然后用C++重写来加快速度。我发现,在我的例子中,我的Python代码运行了5秒,Gurobi运行了5分钟。当然,我可以用C写
    pyomo solve model.py --solver=cplex