当前位置: 首页 > news >正文

使用scipy求解优化问题

一、求解二次规划问题

min(X.T * P * X + C.T * X)

s.t.    Xi  > 0

         ∑Xi= 1

1.定义目标函数

def objective(x):return 0.5 * np.dot(x, np.dot(P, x)) + np.dot(c, x)

2. 定义等式约束

def equality_constraint(x):return np.sum(x) - 1

3.定义边界约束:x

# 定义边界约束:x 每个维度取值 0-1
bounds = [(0, 1), (0, 1), (0, 1)]

4. 定义约束条件

constraint = {'type': 'eq', 'fun': equality_constraint}

5.初始猜测值

initial_guess = np.array([1/3, 1/3, 1/3])

6.求解

# 使用 minimize 函数求解
result = minimize(objective, initial_guess, method='SLSQP', bounds=bounds, constraints=constraint)# 检查是否成功求解
if result.success:optimal_x = result.xprint(f'最优解 x* = {optimal_x}')print(f'最优目标函数值 = {result.fun}')
else:print("求解失败:", result.message)

7.完整代码

import numpy as np
from scipy.optimize import minimize# 定义对称矩阵 P,每个元素大于 0
P = np.array([[2.0, 0.5, 0.3],[0.5, 3.0, 0.2],[0.3, 0.2, 4.0]])
# 定义任意向量 c
c = np.array([-1.0, -2.0, -3.0])# 定义目标函数
def objective(x):return 0.5 * np.dot(x, np.dot(P, x)) + np.dot(c, x)# 定义等式约束:x 元素之和为 1
def equality_constraint(x):return np.sum(x) - 1# 定义边界约束:x 每个维度取值 0-1
bounds = [(0, 1), (0, 1), (0, 1)]# 定义约束条件
constraint = {'type': 'eq', 'fun': equality_constraint}# 初始猜测值
initial_guess = np.array([1/3, 1/3, 1/3])# 使用 minimize 函数求解
result = minimize(objective, initial_guess, method='SLSQP', bounds=bounds, constraints=constraint)# 检查是否成功求解
if result.success:optimal_x = result.xprint(f'最优解 x* = {optimal_x}')print(f'最优目标函数值 = {result.fun}')
else:print("求解失败:", result.message)

8.结果展示

http://www.dtcms.com/a/166851.html

相关文章:

  • 【经管数据】A股上市公司资产定价效率数据(2000-2023年)
  • 数据结构学习之顺序表
  • 【Quest开发】极简版!透视环境下抠出身体并能遮挡身体上的服装
  • Python实例题:Python实现Python解释器
  • Three.js + React 实战系列-3D 个人主页:构建 About 组件 (响应式 + 互动 + 动效)✨
  • 华为云服务器VoceChat在线聊天室部署
  • 注册登录页面项目
  • Ocelot\Consul\.NetCore的微服务应用案例
  • 构建现代分布式云架构的三大支柱:服务化、Service Mesh 与 Serverless
  • 微软推出数款Phi 4“开放式”人工智能模型
  • 系统架构设计师:设计模式——创建型设计模式
  • 微软与Meta大幅增加人工智能基础设施投入
  • 普通 html 项目也可以支持 scss_sass
  • Anaconda中配置Pyspark的Spark开发环境
  • 【中间件】bthread_数据结构_学习笔记
  • terraform 删除资源前先校验资源是否存在关联资源
  • AJAX 实例
  • 【Linux】线程池和线程补充内容
  • Qwen3 正式发布
  • C++——入门基础(2)
  • 工 厂 模 式
  • 游戏引擎学习第252天:允许编辑调试值
  • 企业内训|智能驾驶与智能座舱技术——某汽车厂商
  • 【Qt】网络
  • Python项目源码69:Excel数据筛选器1.0(tkinter+sqlite3+pandas)
  • 《数据结构初阶》【顺序表/链表 精选15道OJ练习】
  • 【数据结构】- 栈
  • 文件操作--文件包含漏洞
  • 如何让Steam下载速度解除封印?!
  • PyTorch线性代数操作详解:点积、矩阵乘法、范数与轴求和