一般的非線性規劃求解(非凸函數)

在這里插入圖片描述

歸納編程學習的感悟,
記錄奮斗路上的點滴,
希望能幫到一樣刻苦的你!
如有不足歡迎指正!
共同學習交流!
🌎歡迎各位→點贊 👍+ 收藏? + 留言?📝
每一個裂縫都是為透出光而努力!
一起加油!

在這里插入圖片描述

一般的非線性規劃求解(非凸函數)

例 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} ?min?x12??0.3x1?x2??2x22?+98x1?+277x2?s.t.????x1?+x2?100,x1??2x2?0,x1?,x2?0.??
由于上述二次規劃的目標函數不是凸函數,不能使用 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.????x12??x2?+x32?0,x1?+x22?+x33?20,?x1??x22?+2=0,x2?+2x32?=3,x1?,x2?,x3?0.?

解 求得當 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.????x1??x2??x3?+x4?=0,x1??x2?+x3??3x4?=1,x1??x2??2x3?+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=16?j=12?zij?(xj??ai?)2+(yj??bi?)2?,s.t.????j=12?zij?=ci?,i=16?zij?ej?,zij?0,?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
英文地址,請注明出處:http://en.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…