一般的非线性规划求解(非凸函数)

在这里插入图片描述

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
每一个裂缝都是为透出光而努力!
一起加油!

在这里插入图片描述

一般的非线性规划求解(非凸函数)

例 5.5 (续例 5.3) 求解如下二次规划模型
min⁡−x12−0.3x1x2−2x22+98x1+277x2s.t.{x1+x2≤100,x1−2x2≤0,x1,x2≥0. \begin{aligned} & \min -x_1^2 - 0.3 x_1 x_2 - 2 x_2^2 + 98 x_1 + 277 x_2 \\ & \text{s.t.} \begin{cases} x_1 + x_2 \leq 100, \\ x_1 - 2 x_2 \leq 0, \\ x_1, x_2 \geq 0. \end{cases} \end{aligned} minx120.3x1x22x22+98x1+277x2s.t.x1+x2100,x12x20,x1,x20.
由于上述二次规划的目标函数不是凸函数,不能使用 cvxpy 库进行求解。

使用 Python 软件求得的最优解为
x1=0,x2=0, x_1 = 0, \quad x_2 = 0, x1=0,x2=0,
目标函数的最优值为 0。

计算的 Python 程序如下:

from scipy.optimize import minimize
import numpy as np# 定义目标向量
c1 = np.array([[-1, -0.15], [-0.15, -2]])
c2 = np.array([98, 277])
# 创建目标函数
obj = lambda x: x @ c1 @ x + c2 @ x
d = np.array([[1, 1], [1, -2]])
e = np.array([100, 0])
# 创建约束条件
constraints = {'type': 'ineq', 'fun': lambda x: e - d @ x}
bd = [(0, np.inf) for i in range(c1.shape[1])]
res = minimize(obj, np.random.randn(c1.shape[1]), constraints=constraints, bounds=bd)
print('最优解为:',np.round(res.x,4))
print('最优值为:',np.round(res.fun,4))

在这里插入图片描述

例 5.6 求下列非线性规划

min⁡f(x)=x12+x22+x32+8,\min f(\boldsymbol{x}) = x_1^2 + x_2^2 + x_3^2 + 8,minf(x)=x12+x22+x32+8,

s. t. {x12−x2+x32≥0,x1+x22+x33≤20,−x1−x22+2=0,x2+2x32=3,x1,x2,x3≥0.\left\{\begin{array}{l}x_1^2 - x_2 + x_3^2 \geq 0, \\x_1 + x_2^2 + x_3^3 \leq 20, \\-x_1 - x_2^2 + 2 = 0, \\x_2 + 2x_3^2 = 3, \\x_1, x_2, x_3 \geq 0.\end{array}\right.x12x2+x320,x1+x22+x3320,x1x22+2=0,x2+2x32=3,x1,x2,x30.

解 求得当 x1=0.5522,x2=1.2033,x3=0.9478x_1 = 0.5522, x_2 = 1.2033, x_3 = 0.9478x1=0.5522,x2=1.2033,x3=0.9478 时,最小值 y=10.6511y = 10.6511y=10.6511

from scipy.optimize import minimize
import numpy as np# 定义目标函数
obj = lambda x: sum(x ** 2) + 8# 不等式约束函数
def constraint1(x):x1, x2, x3 = xreturn [x1 ** 2 - x2 + x3 ** 2,20 - x1 - x2 ** 2 - x3 ** 3]# 等式约束函数
def constraint2(x):x1, x2, x3 = xreturn [-x1 - x2 ** 2 + 2,x2 + 2 * x3 ** 2 - 3]# 定义约束条件
constraints1 = {'type': 'ineq', 'fun': constraint1}
constraints2 = {'type': 'eq', 'fun': constraint2}
constraints = [constraints1, constraints2]
# 边界值
bd = [(0,np.inf) for i in range(3)]
res = minimize(obj, np.random.randn(3), constraints=constraints, bounds=bd)
print('最优解为:', np.round(res.x, 4))
print('最优值为:', np.round(res.fun, 4))

在这里插入图片描述

例 5.7 求解下列规划问题
min⁡z=∣x1∣+2∣x2∣+3∣x3∣+4∣x4∣,s.t.{x1−x2−x3+x4=0,x1−x2+x3−3x4=1,x1−x2−2x3+3x4=−12. \begin{aligned} & \min z = |x_1| + 2|x_2| + 3|x_3| + 4|x_4|, \\ & \text{s.t.} \begin{cases} x_1 - x_2 - x_3 + x_4 = 0, \\ x_1 - x_2 + x_3 - 3x_4 = 1, \\ x_1 - x_2 - 2x_3 + 3x_4 = -\frac{1}{2}. \end{cases} \end{aligned} minz=x1+2∣x2+3∣x3+4∣x4,s.t.x1x2x3+x4=0,x1x2+x33x4=1,x1x22x3+3x4=21.

上述非线性规划问题是一个凸规划,可以使用 cvxpy 库求解,求得的最优解为 $ x_1 = 0.25 $, $ x_2 = x_3 = 0 $, $ x_4 = -0.25 $,目标函数的最优值为 1.25。

计算的 Python 程序如下:

import cvxpy as cp
import numpy as np# 定义变量
x = cp.Variable(4)# 定义目标向量
c = np.arange(1,5)
a = np.array([[1,-1,-1,1],[1,-1,1,-3],[1,-1,-2,3]])
b = np.array([0,1,-1/2])# 定义目标函数
obj = cp.Minimize(c @ cp.abs(x))
# 定义约束条件
constraints = [a @ x == b]
prob = cp.Problem(obj, constraints)
prob.solve(solver='GLPK_MI')
print('最优解为:',x.value)
print('最优值为:',prob.value)

在这里插入图片描述

例 5.8 (供应与选址) 建筑工地的位置(用平面坐标 a,ba,ba,b 表示,距离单位:km)及水泥日用量 ccc (单位:t)由表 5.4 给出。拟建两个料场向 6 个工地运送水泥,两个料场日储量各为 20t,问料场建在何处,使总的吨公里数最小。

表 5.4 建筑工地的位置及水泥日用量表

参数工地 1工地 2工地 3工地 4工地 5工地 6
a/kma / \mathrm{km}a/km1.258.750.53.7537.25
b/kmb / \mathrm{km}b/km1.250.754.7556.57.75
c/tc / \mathrm{t}c/t3547611

解 记第 iii 个工地的位置为 (ai,bi)(i=1,2,⋯ ,6)(a_i, b_i) (i=1,2,\cdots,6)(ai,bi)(i=1,2,,6),水泥日用量为 cic_ici;拟建料场位置为 (xj,yj)(j=1,2)(x_j, y_j) (j=1,2)(xj,yj)(j=1,2),日储量为 eje_jej,从料场 jjj 向工地 iii 的运送量为 zijz_{ij}zij

建立如下的非线性规划模型:
min⁡∑i=16∑j=12zij(xj−ai)2+(yj−bi)2,s.t.{∑j=12zij=ci,i=1,2,⋯ ,6,∑i=16zij≤ej,j=1,2,zij≥0,i=1,2,⋯ ,6;j=1,2. \begin{aligned} & \min \sum_{i=1}^{6} \sum_{j=1}^{2} z_{ij} \sqrt{(x_j - a_i)^2 + (y_j - b_i)^2}, \\ & \text{s.t.} \begin{cases} \sum_{j=1}^{2} z_{ij} = c_i, & i = 1, 2, \cdots, 6, \\ \sum_{i=1}^{6} z_{ij} \leq e_j, & j = 1, 2, \\ z_{ij} \geq 0, & i = 1, 2, \cdots, 6; j = 1, 2. \end{cases} \end{aligned} mini=16j=12zij(xjai)2+(yjbi)2,s.t.j=12zij=ci,i=16zijej,zij0,i=1,2,,6,j=1,2,i=1,2,,6;j=1,2.
利用 Python 软件,求得拟建料场的坐标为 $ (3.2654, 5.1919) ,, (7.25, 7.75) $。由两个料场向6个工地运料方案如表5.5所列,总的吨公里数为71.9352。

表 5.5 两个料场向6个工地运料方案

料 场工地 1工地 2工地 3工地 4工地 5工地 6
料场 10500011
料场 2304760
from scipy.optimize import minimize
import numpy as np# 读数据
data = np.loadtxt('建筑工地的位置及水泥日用量表.txt')
a = data[0];b = data[1];c = data[2]
e = np.array([20,20])# 定义目标函数
def obj(xyz):x = xyz[:2];y = xyz[2:4]z = xyz[4:].reshape(6, 2)obj = 0for i in range(6):for j in range(2):obj += z[i, j] * np.sqrt((x[j] - a[i]) ** 2 + (y[j] - b[i]) ** 2)return obj# 定义约束条件
construction = [{'type': 'eq', 'fun': lambda z: z[4:].reshape(6, 2).sum(axis=1) - c},{'type': 'ineq', 'fun': lambda z: e - z[4:].reshape(6, 2).sum(axis=0)}]# 边界
bd = [(0, np.inf) for i in range(16)]
res = minimize(obj, np.random.randn(16), constraints=construction, bounds=bd)
print('最优解为:', np.round(res.x, 4))
print('最优值为:', np.round(res.fun, 4))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88911.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTFHub————Web{信息泄露[Git泄露(Stash、Index)]}

Web 信息泄露 Git泄露 Stash 首先,我们先读题,由题可知我们可以用BugScanTeam或GitHack完成该题那么我们先开题, 好吧,他问我们flag在哪里,我怎么知道fag在哪里。 先打开GitHack 使用 py GitHack.py http://challenge-…

缺乏实际里程碑管控项目进度,如何设定关键节点

要通过实际里程碑管控项目进度,核心措施包括:设定可量化的关键节点、明确交付标准与责任人、同步风险与资源计划、基于阶段目标拆解任务、建立节点验证与复盘机制。例如,设定可量化的关键节点能让团队清晰理解“何时完成了什么”并及时调整方…

XML E4X:深入解析与高效应用

XML E4X:深入解析与高效应用 引言 XML(可扩展标记语言)作为一种数据交换格式,广泛应用于互联网数据传输、配置文件、数据存储等领域。E4X 是一种扩展 XML 的编程接口,允许开发者以编程方式直接访问和处理 XML 数据。本文将深入探讨 XML E4X 的概念、特点、应用场景以及高…

uniapp---入门、基本配置了解

目录 uniapp 新建项目 uniapp全局配置 组件 1、内置组件 2、扩展 组件 uni-ui 3、第三方组件库 uview-ui 秋云-ucharts (插件市场 ) scss语法(了解) vue2语法(熟悉) uniapp 官方文档:uni-app官网 uni-app 是一个使用 Vue.js 开发所…

springboot 好处

思考1,快速启动,简化配置。自动配置,内置tomcat,无需部署war文件,快速创建独立应用2,提高开发效率,热部署3,微服务生态4,云原生,Docker K8sSpring Boot 的主要…

SSM框架学习——day1

SSM框架概述SSM框架是Java开发中常用的组合框架,由Spring、Spring MVC和MyBatis三个开源框架整合而成。主要用于构建企业级Web应用程序,具有轻量级、模块化、易扩展等特点。Spring框架作为核心,提供依赖注入(DI)和面向…

【html基本界面】

小米界面布局效果htmlcss效果 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>小米商城布局<…

【设计模式】适配器模式(包装器模式),缺省适配器模式,双向适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;详解 一、适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;它将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以协同工作。 简单来说&#xff0c;适配…

安全初级(一)

一.docker的搭建和VPN连接 1.输入指令&#xff1a;apt-get install docker.io docker-compose 2.设置docker代理&#xff1a;创建文件夹以及对应的文件 /etc/systemd/system/docker.service.d/http-proxy.conf 在该文件中配置自己的代理ip以及代理端口 [Service] Environme…

Java多线程:核心技术与实战指南

目录&#x1f680;前言&#x1f914;什么是多线程&#xff1f;&#x1f4bb;创建线程&#x1f4af;创建方法一&#xff1a;继承Thread类&#x1f4af;创建方法二&#xff1a;实现Runnable接口&#x1f4af;创建方法三&#xff1a;实现Callable接口&#x1f4af;三种方法对比&am…

高斯代数基本定理的一种证明

代数基本定理 对于多项式 f(z)anznan−1zn−1⋯a1za0f(z) a_n z^n a_{n-1} z^{n-1} \cdots a_1 z a_0f(z)an​znan−1​zn−1⋯a1​za0​&#xff08;其中 n>1n > 1n>1 且 an,a0≠0a_n, a_0 \neq 0an​,a0​0&#xff09;&#xff0c;它在复数域内有根。 f(z)U…

【K8S】Kubernetes 使用 Ingress-Nginx 基于 Cookie 实现会话保持的负载均衡

文章目录 1. 创建测试应用 Deployment3. 配置基于 Cookie 的 Ingress4. 部署与测试步骤(1) 应用配置(2) 获取 Ingress IP(3) 测试会话保持(4) 使用 Nginx 取消域名的限制(仅推荐测试使用)5、生产优化建议6、独立 Nginx 配置参考在现代微服务架构中,负载均衡是保证高可用的关…

2.查询操作-demo

在连接数据库的基础上步骤&#xff1a;Query-查询关闭查询db.Next()逐行输出&#xff0c;并指定到当前变量Scan-扫描rows, err : db.Query("SELECT id,server_ip FROM softswitch_server_info")package main//查询语句-demo //关键字-queryimport ("database/sq…

用OpenCV标定相机内参应用示例(C++和Python)

下面是一个完整的 使用 OpenCV 进行相机内参标定&#xff08;Camera Calibration&#xff09; 的示例&#xff0c;包括 C 和 Python 两个版本&#xff0c;基于棋盘格图案标定。一、目标&#xff1a;相机标定 通过拍摄多张带有棋盘格图案的图像&#xff0c;估计相机的内参&#…

(二)OpenCV——边缘增强与检测

边缘增强与检测是图像处理中的核心技术&#xff0c;其核心目标是突出图像中的不连续区域&#xff08;边缘&#xff09;&#xff0c;为后续的图像分析提供基础。一、基本概念边缘本质上是图像中灰度/颜色发生突变的区域&#xff0c;对应着&#xff1a;物体边界表面方向改变材质变…

018 进程控制 —— 进程等待

&#x1f984; 个人主页: 小米里的大麦-CSDN博客 &#x1f38f; 所属专栏: Linux_小米里的大麦的博客-CSDN博客 &#x1f381; GitHub主页: 小米里的大麦的 GitHub ⚙️ 操作环境: Visual Studio 2022 文章目录进程控制 —— 进程等待1. 进程等待必要性2. 常用等待方法&#xf…

PHP password_hash() 函数

password_hash() 函数用于创建密码的散列&#xff08;hash&#xff09;PHP 版本要求: PHP 5 > 5.5.0, PHP 7语法string password_hash ( string $password , int $algo [, array $options ] )password_hash() 使用足够强度的单向散列算法创建密码的散列&#xff08;hash&…

理解Linux文件系统:从物理存储到统一接口

目录 一、狭义理解&#xff08;物理层面&#xff09; 二、广义理解&#xff08;Linux系统视角&#xff09; 三、文件结构解析 四、系统实现机制 一、狭义理解&#xff08;物理层面&#xff09; 存储特性&#xff1a;文件以二进制形式存储在磁盘等永久性存储介质中 介质特点…

前端接入海康威视摄像头的三种方案

方案选择​方案适用场景优缺点​Web SDK&#xff08;3.0&#xff09;​​需要完整功能&#xff08;PTZ控制、录像回放&#xff09;功能全&#xff0c;但需加载海康JS文件​RTSP转Web播放​低延迟实时监控需后端转码&#xff08;如FFmpeg转HLS&#xff09;​HTTP API​简单截图或…

openGL学习(Shader)

认识Shader在计算机图形学中&#xff0c;Shader&#xff08;着色器&#xff09;是一种运行在 GPU&#xff08;图形处理单元&#xff09;上的程序&#xff0c;用于控制图形渲染过程中顶点和像素的处理。着色器是 OpenGL、Direct3D、Vulkan 等图形 API 的核心组成部分&#xff0c…