Gurobi基礎語法之 addConstr, addConstrs, addQConstr, addMQConstr

????????在新版本的 Gurobi 中,向 addConstr 這個方法中傳入一個 TempConstr 對象,在模型中就會根據這個對象生成一個約束。更重要的是:TempConstr 對象可以傳給所有addConstr系列方法,所以下面先介紹 TempConstr 對象

TempConstr?

? ? ? ??TempConstr 類的對象作為約束條件,其對象可以有以下幾種形式:

1. 線性約束:x + y <= 5

2. 帶上下界的線性約束:1 <= x + y <= 5

3. 二次約束:x * x + y * y <= 3

4. 用矩陣建立的線性約束:A @ x <= 1

5. 二次型約束:x @ Q @ x <= y @ A @ y

6. 帶絕對值的函數的約束:x == abs_(y)

7. 帶邏輯運算符的約束:x == or_(y, z)? ?或者? ?x == and_(y, z)

8. 帶最大值或最小值函數的約束:x == max_(y, z)? 或者? x == min_(y, z)

9. 借助 TempConstr 自定義的運算符 >> 作為表達式中的運算符:(x == 1) >> (y + z <= 5)

有以下幾點值得說明:

1. Gurobi 中所有關系運算符都必須帶等號,比如 <=, >=, == ,<, >, = 不合法,想要表示小于,例如 x + y < 5 這樣的嚴格不等式約束,可以引入一個很小的值??epsilon,輔助實現嚴格不等式

2. 上面說的第 7 點中,要求x,?y 和 z 都是二元變量,即在添加進模型的時候就設計為GRB.BINARY

3.?上面說的第 9?點中,(x == 1) >> (y + z <= 5) 表達的是,如果 x 為1,則 y + z 必須小于等于5,即 x 這個二元變量控制了后面的不等式約束是否存在

addConstr

Python定義:addConstr(constr, name='')

這個方法的第一個參數就是需要傳入 TempConstr 類型的對象

addConstrs

Python定義:addConstrs(generator, name='')

????????這個方法的第一個參數是 Python 語法中的生成器,也就是說可以傳入一個迭代器,通過循環就可以方便的在一行代碼中就生成多個約束,下面是這個方法使用的一些例子

m.addConstrs(x.sum(i, '*') <= capacity[i] for i in range(5))
m.addConstrs(x[i] + x[j] <= 1 for i in range(5) for j in range(5))
m.addConstrs(x[i]*x[i] + y[i]*y[i] <= 1 for i in range(5))
m.addConstrs(x.sum(i, '*') == [0, 2] for i in [1, 2, 4])

????????約束不可能憑空產生,起碼需要先添加變量,關于添加變量的方法,已經在我的另外一篇博客?addVar 和 addVars的使用?中進行了說明

????????考慮到讀者可能還不是很清楚 Gurobi 中 sum 方法的使用,這已經在我的另外一篇博客tupledict 中的 sum 方法?中進行了說明

? ? ? ? 對于第三個添加的約束,實際上是添加了一個二次約束,對于二次約束,在模型的結果上有很多與線性約束不同的地方,這寫不同點已經在我的另外一篇博客 帶二次約束的模型解構說明中進行了說明

? ? ? ? 如何建立起一個約束帶有上下界的線性優化模型?這在我的另一篇博客中Electricity Market Optimization 探索系列(一)已經進行了說明,

addQConstr

這個方法有兩個版本

版本一:addQConstr(lhs, sense=None, rhs=None, name='')

代碼示例:

model.addQConstr(x*x + y*y, GRB.LESS_EQUAL, z*z, "c0")

?版本二:使用 generator 添加約束

代碼示例:

model.addQConstr(x*x + y*y <= 2.0, "c1")

addMQConstr

Python 定義:addMQConstr(Q, c, sense, rhs, xQ_L=None, xQ_R=None, xc=None, name='')

實際上這里使用一個矩陣來定義二次約束,(注意可以不是二次型,而是帶有交叉項的二次式)

這個二次約束形如?{x}'_{Q_{L}}Qx_{Q_{R}} + c{}'x_{c}? ??sense? ??rhs?

其中sense是一個關系運算符,rhs是一個常數?

Q = np.full((2, 3), 1)
xL = model.addMVar(2)
xR = model.addMVar(3)
model.addMQConstr(Q, None, '<', 1.0, xL, xR)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894502.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894502.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894502.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

五子棋對弈

問題描述 "在五子棋的對弈中&#xff0c;友誼的小船說翻就翻&#xff1f;" 不&#xff01;對小藍和小橋來說&#xff0c;五子棋不僅是棋盤上的較量&#xff0c;更是心與心之間的溝通。這兩位摯友秉承著"友誼第一&#xff0c;比賽第二"的宗旨&#xff0c;決…

使用 HTTP::Server::Simple 實現輕量級 HTTP 服務器

在Perl中&#xff0c;HTTP::Server::Simple 模塊提供了一種輕量級的方式來實現HTTP服務器。該模塊簡單易用&#xff0c;適合快速開發和測試HTTP服務。本文將詳細介紹如何使用 HTTP::Server::Simple 模塊創建和配置一個輕量級HTTP服務器。 安裝 HTTP::Server::Simple 首先&…

在AI技術深度滲透的背景下,2025年傳媒互聯網行業的哪些細分場景和產品形態將迎來爆發式增長?

一、AI技術重構傳媒互聯網行業版圖&#xff1a;從底層邏輯到應用場景 近年來&#xff0c;AI技術已從實驗室走向商業化落地&#xff0c;而傳媒互聯網行業因其龐大的用戶基數、高頻交互場景和豐富的數據積累&#xff0c;成為AI應用的主戰場。根據華源證券最新行業周報&#xff0…

Docker Hub 鏡像 Pull 失敗的解決方案

目錄 引言一、問題二、原因三、解決方法四、參考文獻 引言 在云原生技術火熱的當下&#xff0c;Docker可謂是其基礎&#xff0c;由于其簡單以及方便性&#xff0c;讓開發人員不必再為環境配置問題而傷腦筋&#xff0c;因為可將其看作一個虛擬機程序去理解。所以掌握好它可謂是…

neo4j-community-5.26.0 create new database

1.edit neo4j.conf 把 # The name of the default database initial.dbms.default_databasehonglouneo4j # 寫上自己的數據庫名稱 和 # Name of the service #5.0 server.windows_service_nameneo4j #4.0 dbms.default_databaseneo4j #dbms.default_databaseneo4jwind serve…

unity實現回旋鏢函數

最近學習unity2D&#xff0c;想實現一個回旋鏢武器&#xff0c;發出后就可以在角色周圍回旋。 一、目標 1.不是一次性的&#xff0c;扔出去、返回、沒有了&#xff1b;而是扔出去&#xff0c;返回到角色后方相同距離&#xff0c;再次返回&#xff1b;再次返回&#xff0c;永遠…

【C++基礎】字符串/字符讀取函數解析

最近在學C以及STL&#xff0c;打個基礎 參考&#xff1a; c中的char[] ,char* ,string三種字符串變量轉化的兼容原則 c讀取字符串和字符的6種函數 字符串結構 首先明確三種字符串結構的兼容關系&#xff1a;string>char*>char [] string最靈活&#xff0c;內置增刪查改…

求一個數的數根(高精度)

上一期我們講的是求一個數的數根&#xff0c;和本期唯一不同的是&#xff0c;數據范圍不同了&#xff0c;上一期這個數是小于等于10的18次方的&#xff0c;這一期是小于等于10的1000次方的&#xff0c;開一個變量&#xff1f;肯定不行&#xff0c;我們需要再開一個數組&#xf…

SpringBoot源碼解析(九):Bean定義接口體系

SpringBoot源碼系列文章 SpringBoot源碼解析(一)&#xff1a;SpringApplication構造方法 SpringBoot源碼解析(二)&#xff1a;引導上下文DefaultBootstrapContext SpringBoot源碼解析(三)&#xff1a;啟動開始階段 SpringBoot源碼解析(四)&#xff1a;解析應用參數args Sp…

Vue 3 30天精進之旅:Day 13 - 路由守衛

在構建單頁面應用時&#xff0c;路由守衛是一個非常重要的概念。它允許我們在路由進入或離開時執行一些操作&#xff0c;比如驗證用戶權限、處理數據加載、執行導航確認等。Vue Router提供了多種類型的路由守衛&#xff0c;使我們能夠靈活地控制路由的行為。在今天的學習中&…

【TypeScript】基礎:數據類型

文章目錄 TypeScript一、簡介二、類型聲明三、數據類型anyunknownnervervoidobjecttupleenumType一些特殊情況 TypeScript 是JavaScript的超集&#xff0c;代碼量比JavaScript復雜、繁多&#xff1b;但是結構更清晰 一、簡介 為什么需要TypeScript&#xff1f; JavaScript的…

C++模板編程——可變參函數模板

目錄 1. 可變參函數模板基本介紹 2. 參數包展開——通過遞歸函數 3. 參數包展開——通過編譯期間if語句(constexpr if) 4. 重載 5. 后記 進來看的小伙伴們應該對C中的模板有了一定了解&#xff0c;下面給大家介紹一下可變參函數模板。過于基礎的概念將不仔細介紹。 1. 可變…

ChatGPT-4o和ChatGPT-4o mini的差異點

在人工智能領域&#xff0c;OpenAI再次引領創新潮流&#xff0c;近日正式發布了其最新模型——ChatGPT-4o及其經濟實惠的小型版本ChatGPT-4o Mini。這兩款模型雖同屬于ChatGPT系列&#xff0c;但在性能、應用場景及成本上展現出顯著的差異。本文將通過圖文并茂的方式&#xff0…

三數之和(15)

15. 三數之和 - 力扣&#xff08;LeetCode&#xff09; 可以一起總結的題目&#xff1a;三角形的最大周長&#xff08;976&#xff09;-CSDN博客 解法&#xff1a; class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector…

2025最新源支付V7全套開源版+Mac云端+五合一云端

2025最新源支付V7全套開源版Mac云端五合一云端 官方1999元&#xff0c; 最新非網上那種功能不全帶BUG開源版&#xff0c;可以自己增加授權或二開 擁有卓越的性能和豐富的功能。它采用全新輕量化的界面UI&#xff0c;讓您能更方便快捷地解決知識付費和運營贊助的難題 它基于…

9 點結構模塊(point.rs)

一、point.rs源碼 use super::UnknownUnit; use crate::approxeq::ApproxEq; use crate::approxord::{max, min}; use crate::length::Length; use crate::num::*; use crate::scale::Scale; use crate::size::{Size2D, Size3D}; use crate::vector::{vec2, vec3, Vector2D, V…

數據分析系列--[12] RapidMiner辨別分析(含數據集)

一、數據準備 二、導入數據 三、數據預處理 四、建模辨別分析 五、導入測試集進行辨別分析 一、數據準備 點擊下載數據集 二、導入數據 三、數據預處理 四、建模辨別分析 五、導入測試集進行辨別分析 Ending, congratulations, youre done.

Day33【AI思考】-函數求導過程 的優質工具和網站

文章目錄 **函數求導過程** 的優質工具和網站**一、動態圖形工具**1. **Desmos&#xff08;網頁端&#xff09;**2. **GeoGebra&#xff08;全平臺&#xff09;** **二、分步推導工具**3. **Wolfram Alpha&#xff08;網頁/App&#xff09;**4. **Symbolab&#xff08;網頁/App…

個人筆記(很沒營養,純備忘錄)

1.輸入電阻和輸出電阻指在一個可劃分為3部分的電路中&#xff0c;中間部分電路相當于前面電路的負載有輸入端電阻&#xff0c;稱輸入電阻&#xff0c;相對于后面部分等效為電源有輸出端內阻&#xff0c;稱輸出電阻 理所當然的希望輸出電阻對負載影響小&#xff0c;輸入電阻能完…

當卷積神經網絡遇上AI編譯器:TVM自動調優深度解析

從銅線到指令&#xff1a;硬件如何"消化"卷積 在深度學習的世界里&#xff0c;卷積層就像人體中的毛細血管——數量龐大且至關重要。但鮮有人知&#xff0c;一個簡單的3x3卷積在CPU上的執行路徑&#xff0c;堪比北京地鐵線路圖般復雜。 卷積的數學本質 對于輸入張…