一种基于启发式方法的python非线性编程API

flopt的Python项目详细描述


扑通

一个采用启发式方法的python非线性编程API。在


安装

git clone https://github.com/flab-coder/flopt.git

flopt中的公式化问题

  • 非线性问题

    ^{pr2}$ 在
  • 黑箱问题

    minimize  simulator(a, b, c)
    s.t       0 <= a <= 1
              1 <= b <= 2
              1 <= c <= 3
    
  • 寻找最佳排列问题(包括TSP)

  • 可满足性问题(包括MAX-SAT)


启发式算法

  • 随机搜索
  • 2-选项
  • 群体智能搜索
  • 其他应用

简单的例子

您可以编写类似于纸浆应用程序的代码。在

fromfloptimportVariable,Problem,Solver# Variablesa=Variable('a',lowBound=0,upBound=1,cat='Integer')b=Variable('b',lowBound=1,upBound=2,cat='Continuous')c=Variable('c',upBound=3,cat='Continuous')# Problemprob=Problem()prob+=2*(3*a+b)*c**2+3# set the objective functionprob+=a+b*c<=3# set the constraint# Solversolver=Solver(algo='ScipySearch')# select the heuristic algorithmsolver.setParams(n_trial=1000)# setting of the hyper parametersprob.solve(solver,msg=True)# run solver to solve the problem# display the result, incumbent solutionprint('obj value',prob.getObjectiveValue())print('a',a.value())print('b',b.value())print('c',c.value())

此外,您可以通过CustomExpression

fromfloptimportCustomExpressionfrommathimportsin,cosdefuser_func(a,b,c):return(0.7*a+0.3*cos(b)**2+0.1*sin(c))*abs(c)custom_obj=CustomExpression(func=user_func,variables=[a,b,c])prob=Problem(name='CustomExpression')prob+=custom_obj

在求解TSP的情况下,Permutation变量很有用。在

# Variablesperm=Variable('perm',lowBound=0,upBound=N-1,cat='Permutation')# Objectdeftsp_dist(perm):distance=0forhead,tailinzip(perm,perm[1:]+[perm[0]]):distance+=D[head][tail]# D is the distance matrixreturndistancetsp_obj=CustomExpression(func=tsp_dist,variables=[perm])# Problemprob=Problem(name='TSP')prob+=tsp_obj

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
线程“main”java中的socket异常。网SocketException:在java上重置连接。木卫一。缓冲读取器。读线(未知源)   java原子参考   如何使用Java以编程方式确定两个XML文件(如XPATH)之间的差异?   java使用ApachePOI从存在于不同行中的两列中提取公共值   java在JavaFX中使用WebView会破坏Linux上的UI   Java中for循环中的If语句   Java中Hilberts空间填充曲线算法   由于出现错误,使用Reformation2下载的java文件停止工作   java是否可以通过编程方式控制setjaxbvalidationeventhandler?   没有Eclipse GUI的java Eclipse RCP应用程序   多线程在Java中使用线程安全集合时,处理并发问题的最佳方法是什么?   swing Java LWJGL和JOptionPane   java JPA:设置@JoinColumn(updateable=false)以避免OptimisticLockException   java GL VertexBuffer无效操作   java在Swing中实现后退/前进按钮   java在同一个JTable上创建两个表   类文件中的java不兼容魔术值1008813135   在Java中使用“@”的c#文字字符串?