当前位置: 首页 > 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.结果展示

相关文章:

  • 【经管数据】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)
  • 《大风杀》上海首映,白客说拍这戏是从影以来的最大挑战
  • 11家券商一季度净利翻番:9家利润超20亿,国泰海通居首
  • “非思”的思想——探索失语者的思想史
  • “网约摩托”在部分县城上线:起步价五六元,专家建议纳入监管
  • 湖北鄂城:相继4所小学有学生腹泻呕吐,供餐企业负责人已被采取强制措施
  • 李铁案二审驳回上诉,维持一审有期徒刑20年的判决