SciPy Optimizer 给出不满足约束的结果

2023-12-28

我正在使用 scipy.optimize.minimize 来解决问题,但包给出的结果违反了约束。

这种情况非常简单,只给出一个目标函数和一个约束。这是代码:

   import math
   import numpy as np
   import scipy
   from scipy.optimize import minimize

   def objective(x):
       return np.sum(np.dot(x,x))
   n = 5
   X_bound=[(0,4) for i in range(n)]
   X_guess=[1 for i in range(n)]
   _tmp = []
  func_list = []

  def temp_func(X):
      total = 0
      for i in range(n):
          total = total + np.maximum(X[i] * 5 - 6, 0)
      return total/n - 1
  func_list.append(temp_func)
  for ii in range(len(func_list)):
  _tmp.append({'type': 'ineq', 'fun': func_list[ii]})
  X_constraint=_tmp

  sol=scipy.optimize.minimize(objective,X_guess,method='SLSQP',bounds=X_bound,
                        constraints=X_constraint)
  result = sol.x
  result

上面代码给出的结果是

array([5.61582806e-12, 3.56925226e-12, 3.57912934e-12, 3.57912933e-12, 3.57872619e-12])

这显然违反了唯一的约束。

有什么想法我做错了吗?谢谢


优化没有成功。您可以看到解决方案报告失败...至少它知道它无法满足约束。

>>> result
array([5.61582806e-12, 3.56925226e-12, 3.57912934e-12, 3.57912933e-12,
       3.57872619e-12])
>>> temp_func(result)
-1.0
>>> sol
     fun: 8.270470124157974e-23
     jac: array([1.49123928e-08, 1.49082997e-08, 1.49083195e-08, 1.49083195e-08,
       1.49083186e-08])
 message: 'Iteration limit exceeded'
    nfev: 1697
     nit: 101
    njev: 101
  status: 9
 success: False
       x: array([5.61582806e-12, 3.56925226e-12, 3.57912934e-12, 3.57912933e-12,
       3.57872619e-12])

优化失败的原因是约束中的最大函数。顺序二次规划 https://en.wikipedia.org/wiki/Sequential_quadratic_programming基于线性化约束。在局部,(不满足的)约束线性化为一个常数值,因此迭代解决方案看不到任何方法来取得满足该约束的进展——每次迭代都会减少目标,而不会在解决方案方面取得进展。

我将约束更改为区域中不平坦,以允许算法逐步改进它并且优化成功。

def temp_func(X):
  total = 0
  for i in range(n):
      val = total+X[i]*5 - 6
      if val < 0:
        val = np.arctan(val)
      total = val
  return total/n - 1

这可能是您实际上试图强制执行的约束,但也许您可以顺利地近似您的约束并获得成功。

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

SciPy Optimizer 给出不满足约束的结果 的相关文章

  • 查找两个复杂字典之间的集合差异

    我有两个结构如下的字典 a dict1 a 1 2 3 4 b 1 2 5 6 b dict2 a 1 2 5 6 b 1 2 7 8 我需要找到字典中每个键之间的设置差异 即 dict1 a dict2 a 应该返回 3 4 任何想法都值
  • FastAPI/Pydantic 接受任意 post 请求正文吗?

    我想创建一个 FastAPI 端点 它只接受任意的 post 请求正文并返回它 如果我发送 foo bar 我想得到 foo bar 后退 但我也希望能够发送 foo1 bar1 foo2 bar2 并把它拿回来 我试过 from fast
  • 现在与出生日期之间的年、月、日、分钟差异

    import datetime birthday datetime datetime 1996 8 15 differnce datetime datetime now birthday This returns a timedelta o
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 如何向 scikit-learn KD 树添加/删除数据点?

    我想知道是否可以在创建 scikit learn KDTree 实例后添加或删除数据点 例如 from sklearn neighbors import KDTree import numpy as np X np array 1 1 2
  • 如何使用Python和h5py读取HDF5属性(元数据)

    我有一个 HDF5 文件 里面有多个文件夹 每个文件夹都添加了属性 有些将属性称为 元数据 我知道如何访问文件夹内的键 但不知道如何使用 Python 提取属性h5py包裹 以下是 HDFView 的属性 Folder1 800 4 Gro
  • 如何在 python 3.x 中使用 string.replace()

    The string replace 在 python 3 x 上已弃用 这样做的新方法是什么 与 2 x 一样 使用str replace https docs python org library stdtypes html str r
  • ipython/ pylab/ matplotlib安装和初始化错误

    我在 OS X El Captain 上安装了 matplotlib anaconda ipython 然而 即使在尝试以所有可能的方式设置环境变量之后 我仍无法启动 ipython shell pylab 版本 这是错误 ImportEr
  • 如何将字典和列表安全转储到 YAML 中?

    我想要输出为下面的 YAML item Food eat Food itemId 42536216 category fruit moreInfo organic 我已使用以下代码按照与上面相同的顺序进行打印 但输出未按预期进行 Code
  • 字典键中的通配符

    假设我有一本字典 rank dict V 1 A 2 V 3 A 4 正如您所看到的 我在一个 V 的末尾添加了一个 虽然 3 可能只是 V 的值 但我想要 V1 V2 V2234432 等的另一个密钥 我想检查它 checker V30
  • tkinter - 使用按钮在帧之间来回切换

    我需要功能 最好是一个功能 当按下下一页和后退按钮时可以在页面之间来回切换 我想这可以通过将布尔变量分配给后退和下一页按钮来完成 不确定是否可以这样做 来确定您是否要前进或后退所有页面的有序列表 需要知道当前升高的框架的索引 索引可用于找出
  • GitPython 检查 git pull 是否更改了本地文件

    使用 GitPython 我只想在拉取后本地文件发生更改时才调用函数 例如 如果我在一台单独的计算机上进行推送 然后拉第一台计算机 它按预期工作 但不提供任何输出 理想的输出是已更改的文件列表 或者只是告诉我拉动是否有错误 没有拉动 因为分
  • aiohttp 线程缓慢

    我复制了代码如何在线程中运行 aiohttp 服务器 https stackoverflow com questions 51610074 how to run an aiohttp server in a thread 它运行良好 所以我
  • 如何找到多个 pandas 数据框中一对列与任意顺序对的交集?

    我有多个 pandas 数据框 为了简单起见 假设我有三个 gt gt df1 col1 col2 id1 A B id2 C D id3 B A id4 E F gt gt df2 col1 col2 id1 B A id2 D C id
  • 检查 IP 地址是否在给定范围内

    我想检查一下是否有IP180 179 77 11位于特定范围之间 例如180 179 0 0 180 179 255 255 我编写了一个函数 它将每个 IP 八位字节与其他八位字节进行比较 def match mask IP min ip
  • 当在Python中使用负数对字符串进行切片时,0被禁用?

    假设我有一个字符串 gt gt gt a akwkwas gt gt gt gt gt gt a 3 was gt gt gt a 3 None was gt gt gt a 3 0 为什么我不能使用0作为切片的末尾 这是来自文档 记住切片
  • 在html表格的每一行添加点击功能

    我最近创建了一个函数 它根据用户在网站中的输入进行一些复杂的名称匹配 并将结果作为表格格式的 html 文件返回 我的问题是如何在每一行添加点击功能 df get cust info returns a pandas dataframe d
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是

随机推荐

  • Dart SDK 0.8.10.3_r29803 dart:js 回调

    有人可以给我一个遵循此流程的 Dart 代码示例吗 1 Dart调用Javascript函数 2 Javascript 通过 Javascript api 加载一些数据 3 Javascript返回数据给Dart 目前我只能调用我需要的Ja
  • 闪烁的托盘图标

    我知道如何使用 java 在 Windows 系统托盘中放置图标 但是执行系统托盘图标的最佳方法是什么Blinking 或者如果我可以不时或在某些事件 应用程序运行时 替换任何图标 请分享您的经验 提前致谢 在某些基础上更改图标没有问题 输
  • 在巨大的 1 和 0 列表中提取 1 密集区域的边界

    我不知道如何表达我的问题 但这里是 我有一个巨大的 1 和 0 列表 总长度 53820 列表的示例 0 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 可视化如下所示 x axis 元素的索引 从 0
  • 更新 MongoDB 中数组元素的值

    我想知道如何更新数组 array of stuff 中 名称 字段标识的元素之一的 值 字段 例如 我想将 name of thing 1 的值更新为 new value of thing 1 我怎样才能做到这一点ONLY使用更新命令的第二
  • 如何从 HTML 表格中删除特定单元格?

    假设我有 HTML 表格 并且我想从 HTML 表格中删除一个单元格 如下所示 我已将单元格边框颜色更改为白色 因为整个表格的边框颜色是黑色 因此它显示灰色 问题是我无法删除表格边框 所以我使用了边框折叠 折叠 那么我怎样才能改变它 使边框
  • Hive 表的 ORC 拆分生成问题

    我在 Hadoop 3 3 4 上使用 Hive 版本 3 1 3 和 Tez 0 9 2 当我创建一个包含拆分的 ORC 表并尝试查询它时 我得到一个ORC split generation failed例外 如果我连接表格 https
  • cocos2d可以调节音量吗?

    我使用以下方法 在cocos2d中表达声音效果 SimpleAudioEngine sharedEngine playBackgroundMusic BackGround m4a 但背景音乐的音量太小 那么 有没有办法调节音量呢 Simpl
  • 无法使用 Eclipse 和 Maven 让 Struts2 Hello World 工作

    该网站不允许用户向他们的教程提出技术问题 我认为该教程已损坏 http www mkyong com misc how to use mkyong tutorial http www mkyong com misc how to use m
  • std::function 无法区分重载函数

    我试图理解为什么std function无法区分重载函数 include
  • 无法加载私钥。 (PEM例程:PEM_read_bio:无起始行:pem_lib.c:648:预期:任何私钥)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个 key 文件 它是 PEM 格式的私钥文件 我没有制作这个文件 但我从某个地方得到了这个 我想使用 openssl 工具查看其
  • 如何对齐Gridview中心

    我想将 GridView 居中对齐 我还是这样 正如您在上图中看到的 我在左侧获取图像 但我想在中心显示图像 如下所示 另一件事是获得文本背景的额外宽度我如何仅在图像中显示文本背景 现在 gridview 位于中心 但仍然遇到问题 请参阅文
  • 在 Titanium 应用程序中找不到库 stlport_shared

    我想创建一个 Titanium 模块 因此我有一个扩展 KrollModule 及其方法的类 Kroll method public void example Activity activity this getActivity Strin
  • git 子模块的公共子模块

    我有一个申请main由多个子模块组成A B and utility functions 这两个子模块A and B本身包含子模块utility functions main A utility functions B utility fun
  • Tesseract-OCR 3.02 与 libc++

    Xcode 4 6 iOS SDK 6 1 tesseract ocr 3 02 由于最新的 OpenCV 版本是使用构建的libc 并且 tesseract ocr 是使用构建的libstdc 库 它们不能在一个 xcode 项目中一起使
  • 禁止用户订阅 Firebase 主题

    如何消除应用程序用户拨打电话的机会FirebaseMessaging subscribeToTopic String 为了仅在服务器端处理主题管理 Firebase 云消息传递主题是公开的 无法阻止特定用户订阅它们
  • ERRO[0043] 拨打 gRPC 失败:无法升级到 h2c,收到 501

    当我尝试使用以下命令构建 Dockerfile 时docker build t myimage1 今天我收到这个错误 ERRO 0043 failed to dial gRPC unable to upgrade to h2c receiv
  • 用lark语法识别多行部分

    我正在尝试编写一个简单的语法来解析具有多行部分的文本 我不知道该怎么做 这是我到目前为止写的语法 如果有任何帮助 我们将不胜感激 ps 我意识到 lark 对于这个问题来说太过分了 但这只是我试图解析的一个非常简化的版本 from unit
  • 调试多线程应用程序[重复]

    这个问题在这里已经有答案了 我有一个用 C 和 MFC 编写的应用程序 它在 Windows 上运行多线程 有时我确实会收到一些抱怨 例如由于这些线程而导致的死锁或未处理的异常 通常我使用 Visual Studio 如果问题可重现 或使用
  • 恢复 git merge 冲突标志

    我正在尝试找出一种与团队其他成员共享合并冲突的方法 我们有一些非常大的分支 合并它们会产生很多冲突 我尝试了几种不同的方法 我当前的尝试包括将处于冲突状态的文件推送到远程存储库 将合并标记留在文件中 然后运行一个烦人的长别名来 grep 通
  • SciPy Optimizer 给出不满足约束的结果

    我正在使用 scipy optimize minimize 来解决问题 但包给出的结果违反了约束 这种情况非常简单 只给出一个目标函数和一个约束 这是代码 import math import numpy as np import scip