Python:有限制的非线性优化(Gekko?)

2024-04-12

我希望能够用Python解决以下问题:

给定观测数据 x(1)....x(n) 和已知的固定目标“B”和公差“E”,求解参数 a0、a1 和 a2,从而最小化:

总和(w(i)^2)

其中 w(i)=exp[a0+a1x(i)+a2x(i)^2]

具有以下两个限制:

  1. sum(w(i)) = n ,即 w(i) 的平均值等于 1
  2. abs[sum(w(i)*x(i)/n) - B]

我已经尝试使用 Gekko 和 Optimize 包好几个星期了,但我是一个 Python 新手,而且真的很挣扎。多次尝试使用 ChatGPT 也没有帮助。

任何帮助感激不尽!

亲切的问候, 乔纳森


这是一个潜在的解决方案。

import numpy as np
from gekko import GEKKO
m = GEKKO(remote=False)
x = np.array([1,2,5,3,2.7,5.1,2.5]); n = len(x)
a = m.Array(m.Var,3,lb=-100,ub=100)
w = np.array([m.Intermediate(m.exp(a[0]+a[1]*x[i]\
                                   +a[2]*x[i]**2))
                  for i in range(n)])
B = 3.1
E = 0.08
Ec = m.Intermediate(m.sum(w*x)/n-B)
m.Equation(m.abs3(Ec)<E)
m.Equation(m.sum(w)==n)
m.Minimize(m.sum(w**2))
m.solve()

这可以使用 APPT 求解器在一次迭代中求解。它将采用新的数据、目标和公差值提供不同的解决方案。

 ---------------------------------------------------
 Solver         :  APOPT (v1.0)
 Solution time  :  0.023999999999999997 sec
 Objective      :  6.999999999999998
 Successful solution
 ---------------------------------------------------

这是显示解决方案的代码:

print('-'*10)
for i in range(3):
    print(f'a{i}={a[i].value[0]:.3g}')
print('-'*10)
for i in range(n):
    print(f'w{i}={w[i].value[0]:.3g}')
print('-'*10)
print(f'Ec={Ec.value[0]} E={E}')
print('-'*10)

结果表明满足所有约束条件。

----------
a0=-7.38e-09
a1=4.91e-09
a2=-6.73e-10
----------
w0=1
w1=1
w2=1
w3=1
w4=1
w5=1
w6=1
----------
Ec=-0.057142856157 E=0.08
----------

如果存在不可行的解决方案,则最小化 E 而不是设置硬限制。

# E = 0.08
E = m.Var(lb=0,ub=10)
m.Minimize(1e-4*E)

您还可以尝试使用方程两边的平方(以删除绝对值)。

m.Equation(Ec<E**2)

这避免了需要 APOPT 求解器的二进制变量。通过对方程两边进行平方,您可以切换到 IPOPT 求解器:m.options.SOLVER=3或者只使用 Gekko 中的默认选项。

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

Python:有限制的非线性优化(Gekko?) 的相关文章

随机推荐

  • Heroku 上的 Django 部署问题与正在运行的应用程序的精确克隆:PUSH REJECTED ERROR

    我在 Heroku 上有一个 Django 应用程序 我在同一个 Heroku 帐户上设置了另一个应用程序 现在我想要第一个应用程序的另一个实例 我刚刚克隆了第一个应用程序并推送到新创建的应用程序中 但它不起作用 做的时候出现这个错误git
  • 编译时 -pthread 标志的含义

    在各种多线程 C 和 C 项目中 我看到了 pthread标志应用于编译和链接阶段 而其他人根本不使用它 只是通过 lpthread到链接阶段 不编译链接有没有危险 pthread标志 即什么 pthread实际上呢 我主要对 Linux
  • npm 安装后如何引用 Google Material-Design-Icons?

    所以做完之后npm install material design icons 我如何在我的React应用 所包括的方法here https google github io material design icons icon font
  • Laravel - 缓存 Eloquent 并频繁更新

    是否可以对经常修改的对象使用缓存 例如 假设我们有一个 BlogPost 对象 并且有一个经常更改的 num of views 列 以及其他列 是否可以更新缓存和数据库中的 num of views 字段 而不破坏缓存对象并重新创建它 我可
  • 如何通过 UIAutomation 处理“_APPNAME_想使用您当前的位置”警报

    好吧 这让我抓狂 我正在运行一个小型 CI 构建系统 我正在使用 UIAutomation 对我的应用程序进行 UI 测试 由于应用程序使用 CoreLocation 因此第一次启动应用程序时 我会收到一条小警报 要求我确认是否希望跟踪我的
  • Swig (Node.js) 中的 JSON.parse() ?

    当我陷入困境时 我试图从 Jade 切换到 Swig 被 Swig 的疯狂性能所吸引 作为我的 Express 模板引擎 我将一系列序列化 JSON 从 Express 发送到 Swig 并使用此循环检索 Swig 中的数据这里 ul if
  • node.js fs.writeFile 未完全覆盖文件

    我有一个长度为 X 的文件 它正在被长度为 X Y 的字符串覆盖 问题是 该文件仍然保留 X Y 过去的信息 因此它与第一个较长的文件一样长 所以这是我的测试输出 它让我适合 文件开头为 sOption1 String nOption2 2
  • SQL 错误:ORA-00913:值太多

    两个表在表名 列名 数据类型和大小方面相同 这些表位于不同的数据库中 但我习惯于 当前登录 hr 用户 insert into abc employees select from employees where employee id 10
  • Stripe 结账模式的事件或方法

    有什么方法可以在 Stripe Checkout 模式关闭时触发事件吗 Stripe 的模式关闭和响应传递之间存在大约 0 5 1 秒的延迟 那时 用户可能会点击离开页面等 为了解决这个问题 我们可以执行一些操作 例如禁用所有链接或在页面上
  • 如何在现有 Windows 应用程序中获得 ATL 支持

    我正在 Visual Studio 2012 中使用 Qt 5 3 1 构建一个应用程序 我还想使用一个硬件库 这需要我向项目添加一个简单的 ATL 对象 这可以通过使用 Visual Studio 向导来完成 该向导抱怨我的项目既不是 M
  • 如何确定函数特化的主要模板?

    函数模板专业化的主要模板通常是非常直观的 但是 我正在寻找正式的规则来理解更令人惊讶的情况 例如 template
  • com.google.gwt.user.client.rpc.InknownRemoteServiceException

    我的 GWT 应用程序有问题 我部署在 Jetty 服务器上并运行 但是当我执行服务器调用 GWT 服务器包上的类 时 服务器返回错误消息 消息是 7 0 6 http localhost zbapp zb app A31E1254E17F
  • 抑制 make clean 中的消息(Makefile 无提示删除)

    我想知道如何避免 Makefile 中出现一些回声 clean rm fr o 该规则将打印 gt make clean rm fr o gt 我怎样才能避免这种情况 首先 实际的命令必须位于下一行 或者至少 GNU Make 是这样 它可
  • 在所有存储过程中搜索模式然后打开它进行更改的方法

    如何在所有存储过程中搜索某个模式 然后打开要编辑的存储过程 SQL Server 2005 内部有内置的东西吗 或者是否有任何第三方插件可以进行此搜索 我也在使用 Red Gate 的 SQL Prompt 但我没有注意到该选项 目前我正在
  • Zend_Db:如何从表中获取行数?

    我想知道一个表中有多少行 我使用的数据库是MySQL数据库 我已经有一个 Db Table 类 用于像这样的调用fetchAll 但我不需要表中的任何信息 只需要行数 如何在不调用的情况下获得表中所有行的计数fetchAll count d
  • 重写大型 IN 子句的最高效方法是什么?

    我使用 go 和 gorm 编写了一个 API 它在我们的数据库上运行计算并返回结果 我刚刚达到了参数限制IN使用聚合时的条件 查询示例 SELECT SUM total amount from Table where user id in
  • 使用 While() 结构时 Gridview 不会填充。 C# ASP.Net

    我在使用此网格视图时遇到问题 我正在用查询填充它 但是 如果我使用 while reader Read 结构 它就不会填充甚至不会出现 没有 while 结构 它工作得很好 但是 我需要访问两个特定字段 代码如下 SqlDataReader
  • getLastknownLocation() 在 nexus 上返回 null 值

    我正在开发基于位置的项目 我使用以下代码 我正在为该项目使用 google api 8 lm requestLocationUpdates LocationManager GPS PROVIDER 0 0 this currloc lm g
  • 为什么我们应该总是从函数返回值?

    我不是一个编程高手 但多次听程序员说我们应该始终从函数返回值 我想知道原因 函数不需要返回任何内容 如果您查看 C 函数 您会发现其中许多函数不需要返回任何内容 好吧 不是明确地 void nonReturningFunction cons
  • Python:有限制的非线性优化(Gekko?)

    我希望能够用Python解决以下问题 给定观测数据 x 1 x n 和已知的固定目标 B 和公差 E 求解参数 a0 a1 和 a2 从而最小化 总和 w i 2 其中 w i exp a0 a1x i a2x i 2 具有以下两个限制 s