优化求和函数 - GEKKO

2024-02-04

我刚刚开始学习优化,在寻找以下问题的最佳值时遇到一些问题。 注意:这只是我想到的一个随机问题,没有实际应用。

Problem:

where x可以是列表中的任何值 ([2,4,6]) 并且y介于 1 和 3 之间。

我的尝试:

from gekko import GEKKO
import numpy as np
import math

def prob(x,y,sel):
    z = np.sum(np.array(x)*np.array(sel))
    cst = 0
    i=0
    while i <= y.VALUE:
        fact = 1
        for num in range(2, i + 1): # find the factorial value
            fact *= num
        cst += (z**i)/fact
        i+=1
    return cst


m = GEKKO(remote=False)

sel = [2,4,6] # list of possible x values
x =  m.Array(m.Var, 3, **{'value':1,'lb':0,'ub':1, 'integer': True})
y = m.Var(value=1,lb=1,ub=3,integer=True)

# switch to APOPT
m.options.SOLVER = 1

m.Equation(m.sum(x) == 1) # restrict choice to one selection

m.Maximize(prob(x,y,sel))
m.solve(disp=True)


print('Results:')
print(f'x: {x}')
print(f'y : {y.value}')
print('Objective value: ' + str(m.options.objfcnval))

Results:

----------------------------------------------------------------
 APMonitor, Version 0.9.2
 APMonitor Optimization Suite
 ----------------------------------------------------------------


 --------- APM Model Size ------------
 Each time step contains
   Objects      :  0
   Constants    :  0
   Variables    :  4
   Intermediates:  0
   Connections  :  0
   Equations    :  2
   Residuals    :  2

 Number of state variables:    4
 Number of total equations: -  1
 Number of slack variables: -  0
 ---------------------------------------
 Degrees of freedom       :    3

 ----------------------------------------------
 Steady State Optimization with APOPT Solver
 ----------------------------------------------
Iter:     1 I:  0 Tm:     -0.00 NLPi:    2 Dpth:    0 Lvs:    0 Obj: -7.00E+00 Gap:  0.00E+00
 Successful solution

 ---------------------------------------------------
 Solver         :  APOPT (v1.0)
 Solution time  :  0.024000000000000004 sec
 Objective      :  -7.
 Successful solution
 ---------------------------------------------------


Results:
x: [[0.0] [0.0] [1.0]]
y : [1.0]
Objective value: -7.0

x应该是 [0,0,1] (即 6)并且y应为 3 以获得最大值 (61)。x我得到的值是正确的,但由于某种原因y我得到的值是错误的。是什么导致了这个问题?我的配方有问题吗?另外,如果您能向我指出有关 APOPT 解算器输出中的各种符号(如 Tm、NLPi 等)的更多信息,也会非常有帮助。


这是gekko中的解决方案:

x=6.0
y=3.0

您需要使用 gekko 函数来构建函数并以某种方式提出问题,以便方程不会随着变量值的变化而变化。

from gekko import GEKKO
import numpy as np
from scipy.special import factorial

m = GEKKO(remote=False)
x = m.sos1([2,4,6])
yb = m.Array(m.Var,3,lb=0,ub=1,integer=True)
m.Equation(m.sum(yb)==1)
y = m.sum([yb[i]*(i+1) for i in range(3)])
yf = factorial(np.linspace(0,3,4))
obj = x**0/yf[0]
for j in range(1,4):
    obj += x**j/yf[j]
    m.Maximize(yb[j-1]*obj)
m.solve()
print('x='+str(x.value[0]))
print('y='+str(y.value[0]))
print('Objective='+str(-m.options.objfcnval))

对于你的问题,我使用了特殊订购套装(类型 1) https://en.wikipedia.org/wiki/Special_ordered_set获取 2、4 或 6 选项。 选择y作为 1、2 或 3 我计算了所有可能的值,然后使用二进制选择器yb选择一个。有一个限制,即只能使用其中一个m.sum(yb)==1。有壁虎的例子 https://apmonitor.com/wiki/index.php/Main/GekkoPythonOptimization, 文档 https://gekko.readthedocs.io/en/latest/, and a 短期课程 https://apmonitor.com/do/index.php/Main/ShortCourse如果您需要额外的资源,可以使用。 这是求解器的输出:

 ----------------------------------------------------------------
 APMonitor, Version 0.9.2
 APMonitor Optimization Suite
 ----------------------------------------------------------------


 --------- APM Model Size ------------
 Each time step contains
   Objects      :  1
   Constants    :  0
   Variables    :  11
   Intermediates:  1
   Connections  :  4
   Equations    :  10
   Residuals    :  9

 Number of state variables:    11
 Number of total equations: -  7
 Number of slack variables: -  0
 ---------------------------------------
 Degrees of freedom       :    4

 ----------------------------------------------
 Steady State Optimization with APOPT Solver
 ----------------------------------------------
Iter:     1 I:  0 Tm:      0.00 NLPi:    6 Dpth:    0 Lvs:    0 Obj: -6.10E+01 Gap:  0.00E+00
 Successful solution

 ---------------------------------------------------
 Solver         :  APOPT (v1.0)
 Solution time  :  0.047799999999999995 sec
 Objective      :  -61.
 Successful solution
 ---------------------------------------------------


x=6.0
y=3.0
Objective=61.0

以下是有关以下内容的更多信息:求解器 APOPT 选项 https://apmonitor.com/wiki/index.php/Main/OptionApmSolver。迭代摘要描述了分支定界进展 https://apmonitor.com/me575/index.php/Main/DiscreteOptimization. It is Iter=迭代次数,Tm=解决NLP的时间,NLPi=NLP迭代,Dpth=分支树的深度,Lvs= 离开的候选人数量,Obj=NLP 解决方案目标,以及Gap=整数解和最佳非整数解之间的差距。

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

优化求和函数 - GEKKO 的相关文章

  • 使用乘法执行整数除法[重复]

    这个问题在这里已经有答案了 查看编译器生成的 x86 程序集 我注意到 无符号 整数除法有时会实现为整数乘法 这些优化似乎遵循以下形式 value n gt value 0xFFFFFFFF n 1 0x100000000 例如 除以 9
  • 向循环中添加代码如何使其速度更快?

    我有一个带有内部循环的简单函数 它缩放输入值 在查找表中查找输出值 并将其复制到目的地 ftol ambient是我从网上复制的一个技巧 用于将float快速转换为int for i 0 i lt iCount i iScaled ftol
  • winkler的Python性能改进请求

    我是一个 python n00b 我想要一些关于如何改进算法的建议 以提高计算两个名字的 Jaro Winkler 距离的方法的性能 def winklerCompareP str1 str2 Return approximate stri
  • 在 .NET 中,mystring.Length == 0 或 mystring == string.Empty 哪个最好? [复制]

    这个问题在这里已经有答案了 可能的重复 检查字符串内容 字符串长度与空字符串 https stackoverflow com questions 10230 checking for string contents string lengt
  • mod_pagespeed 有什么作用?

    这是参考 http googlecode blogspot com 2011 01 go daddy makes web faster by enabling html http googlecode blogspot com 2011 0
  • CUDA 常量内存是否应该被均匀地访问?

    我的 CUDA 应用程序的恒定内存小于 8KB 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 如果是 如何确保所有线程同时访问同一地址 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 是的 这缓存本身每
  • 预取双类成员需要转换为 char*?

    我有一个正在使用的课程 mm prefetch 预先请求包含 double 类型的类成员的缓存行 class MyClass double getDouble return dbl other members double dbl othe
  • 查找二维空间中圆内的所有点

    我表示我的 2D 空间 考虑一个窗口 其中每个像素显示为 2D 数组中的一个单元格 即 100x100 的窗口由相同维度的数组表示 现在给定窗口中的一个点 如果我画一个半径的圆r 我想找到该圆圈中的所有点 我想我应该检查半径周围方形区域中的
  • scipy-optimize-minimize 不执行优化 - CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL

    我试图最小化定义如下的函数 utility decision decision risk cost 其中变量采用以下形式 决策 二进制数组 风险 浮点数数组 成本 常数 我知道解决方案将采取以下形式 决定 1如果 风险 gt 阈值 决定 0
  • 使用列模数的更简洁方法

    我目前有一个人员列表 我已将其分为两列 但在完成代码后 我一直想知道是否有更有效或更干净的方法来完成同样的事情 echo table class area list tr Loop users within areas divided up
  • 快速分类(分箱)

    我有大量条目 每个条目都是浮点数 这些数据x可以通过迭代器访问 我需要使用像这样的选择对所有条目进行分类10
  • Scipy 最小化 fmin - 语法问题

    我有一个函数 它接受多个参数 一个数组和两个浮点数 并返回一个标量 浮点数 现在我想通过改变两个参数来最小化这个函数 两个浮点数 该数组在函数内部 解包 然后使用其内容 数组和浮点数 如何使用 SciPy 的 fmin 函数来完成此操作 我
  • Rglpk - 梦幻足球阵容优化器 - For 循环输出的 Rbind

    我有一个使用 Rgplk 的梦幻足球阵容优化器 它使用for循环生成多个最佳阵容 其数量由用户输入 代码如下 Lineups lt list for i in 1 Lineup no matrix lt rbind as numeric D
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是
  • 规范“毒”方式真的值得吗? (3NF)

    我正处于数据库设计的早期阶段 所以还没有最终的结果 并且我正在为具有可选标签的线程使用 TOXI 3表设计 但我忍不住觉得加入是并不是真的必要 也许我只需要依赖我的简单标签列posts我可以在其中存储类似 varchar 的表
  • 在 any() 语句中迭代一个小列表是否更快?

    在低长度迭代的限制下考虑以下操作 d 3 slice None None None slice None None None In 215 timeit any type i slice for i in d 1000000 loops b
  • 返回值的复制省略和 noexcept

    我有一个这样的函数模板 template
  • 找到一系列间隔的最有效分组

    我有一个应用程序 其中有一系列不重叠的固定宽度间隔 每个间隔都有一个给定的键 每个间隔具有相同的宽度 并且可以存在连续的间隔 本质上 我想以最小化单独间隔的数量的方式对间隔和键进行分组 这可以通过合并具有相同键的连续间隔或查找匹配间隔并将它
  • 方法返回 IOrderedEnumerable 而不是 IEnumerable 是否有利?

    Can it be advantageous for a method to return IOrderedEnumerable instead of IEnumerable 仅当您希望人们每次都订购该枚举并且发现很难弄清楚如何执行此操作时
  • 确定向量中是否存在元素的最有效方法

    我有几种算法取决于确定元素是否存在于向量中的效率 在我看来 这 in 这相当于is element 应该是最有效的 因为它只返回一个布尔值 在测试了几种方法之后 令我惊讶的是 这些方法是迄今为止效率最低的 以下是我的分析 随着向量大小的增加

随机推荐

  • 并排均匀打印 2 个均匀填充的列表

    我使用以下代码生成 2 个列表 nameList 和gradeList nameList gradeList for row in soup find all tr name row select th strong grade row s
  • Eclipse 问题 - 启动错误:无法连接到远程虚拟机。连接超时

    我收到消息 启动错误 无法连接到远程虚拟机 连接超时 每次我在读取设备上调试我的应用程序时 我在 AndroidManifest 中添加了
  • 如何通过 Go SDK 流式传输 Docker 容器日志

    我正在为 Go 中的一些游戏服务器软件编写一个工具 名为sampctl https github com Southclaws sampctl主要功能是为服务器实例启动 Docker 容器 然后捕获从容器中发出的日志 稍微清理一下并将它们发
  • iOS7 标签栏图标太大

    似乎我在处理像图标这样简单的事情时遇到了困难 我正在构建一个仅适用于 iOS7 的应用程序 因此设备是视网膜显示屏 不包括 iPad 2 所以我为我的标签栏制作了一些 60 x 60 的图标 然而这些太大了 而且 30 x 30 有点像素化
  • 从自定义 SurfaceView 获取位图

    我在一个扩展表面视图并实现可运行的类中有这段代码 我能够使用该类基本上允许您使用不同的颜色等绘制到画布上 我正在尝试找到一种方法 该方法允许我在绘制图像后保存图像 这就是方法 无论我做什么 我都会得到一张没有任何内容的黑色图像 有任何想法吗
  • Java - 字符缓冲区问题

    我有一个 1 99 GB 的字符文件 现在 我想从该文件中随机提取数百万个子序列 例如从位置 90 到 190 10 到 110 50000 到 50100 等 每个子序列长 100 个字符 我通常使用 FileChannel channe
  • 如何使用多线程进行zlib压缩(相同输入源)

    我的目标是在并行线程中压缩同一源的数据 我已经定义了列表中的作业 这些作业具有读取信息 每个作业中 500kb 1MB 我的压缩器线程将使用 ZLIB 压缩每个块的数据并将其存储在相应作业的 outbuf 中 现在 我想合并所有这些并创建一
  • 如何检测用户是否在浏览器中启用了全屏

    当用户在 Chrome 或 FireFox 中启用全屏时 是否会触发一些 JavaScript 事件 我有 WebGL 应用程序 画布宽度和高度设置为一定大小 当用户启用全屏时 我想调整其大小 如果没有这样的事件 我是否应该开始研究用画布填
  • 如何在 PyQt5 中使用全局键盘快捷键显示 QMenu?

    我试图通过热键 例如 F1 显示 QMenu 实例PyQt5 然后我找到了这个包keyboard https pypi org project keyboard 尝试像这样使用它 keyboard add hotkey F1 self sh
  • 将 HTML 表转换为 JSON

    我正在尝试将通过 BeautifulSoup 提取的表转换为 JSON 到目前为止 我已经成功隔离了所有行 但我不确定如何使用这里的数据 任何建议将非常感激 tr td strong Balance strong td td strong
  • WP8.1后退按钮退出应用程序

    上次我针对 Windows Phone 进行开发时使用的是版本 8 现在我正在使用 8 1 也许这是微软的一项新功能 但是当我按下手机上的后退按钮时 无论我对应用程序的了解有多深 应用程序都会最小化 这真的很烦人 有什么我可以做的吗 提前谢
  • 自动填充子图

    我正在编写一个 python 脚本 该脚本将 1 获取每个子图的 y 值列表 以针对一组通用的 x 值进行绘制 2 将每个子图设为散点图并放置将其放置在子图网格中的适当位置 并且 3 针对不同大小的子图网格完成这些任务 第三个语句的意思是
  • 我是否需要更改 xml 代码以支持所有屏幕尺寸的 Android 设备?

    我已经为不同的屏幕尺寸创建了布局 这是我的默认布局的 xml 代码 但所以任何人请告诉我应该做什么来支持任何屏幕尺寸的 Android 设备的布局 我需要更改我的 xml 代码吗 或者 只是我需要修改我的xml代码吗 请告诉我 以便我解决我
  • Python 2.7 的 Shebang 线

    我已经在我的Linux Centos中安装了Python2 7 它默认安装了Python2 6 默认Python root linuxhost PythonProjects python V Python 2 6 6 默认Python2 7
  • 错误:找不到字段的设置器。 - java.util.ArrayList 中的大小 - Room 中的嵌入式 ArrayList 无法编译

    我在将 Android 4 1 2 更新到 4 2 2 后收到此错误消息 但在将 Android Studio 更新到 4 1 2 以上的任何版本后收到此错误消息 What went wrong Execution failed for t
  • 如果模型实现了 INotifyPropertyChanged,ViewModel 应该如何注册/取消注册 PropertyChanged 事件?

    我有一个实现的模型INotifyPropertyChanged并且它可能会被后台业务线程更新 其相关ViewModel也实现了INotifyPropertyChanged 他们的 View 显然绑定到 ViewModel 该视图可能会显示在
  • 合并两个数据框,两者的坐标都基于最近的位置

    我有一个包含局部变量的大型数据框 约 130000 行 和另一个包含物种密度的大型数据框 约 7000 行 两者都有 x 和 y 坐标 但这些坐标并不总是匹配 例如 df1 lt data frame X c 2 4 1 2 5 Y c 6
  • Django Rest Framework - 注册后返回用户 ID 和令牌

    我尝试注册用户并返回令牌和用户 ID 像这样做 from django shortcuts import render from rest framework response import Response from rest frame
  • APL、A、J、K?

    数组语言的景观虽然令人着迷 但也令人困惑不已 有理由选择 J 或 K 或 APL 或 A 之一吗 这些选项似乎都不是开源的 有开源版本吗 我很想拓展我的思维 但我仍然感到困惑 这些语言之间的差异相对微妙 APL 正确 具有原始符号表示法的优
  • 优化求和函数 - GEKKO

    我刚刚开始学习优化 在寻找以下问题的最佳值时遇到一些问题 注意 这只是我想到的一个随机问题 没有实际应用 Problem where x可以是列表中的任何值 2 4 6 并且y介于 1 和 3 之间 我的尝试 from gekko impo