數學建模 第一節

目錄??????

前言

一 優化模型的類型

?二? 線性規劃1

? ? ? 線性規劃2

?三 0-1規劃

總結


前言

數學建模主要是將問題轉化為模型,然后再以編程的形式輸出出來
算法都知道,數學建模也需要用到算法,但是不是主要以編程形式展示,而是利用模型和有關于數學建模的公具加以展示,這里主要以問題的形式引出數學建模的知識點和編程知識點


一 優化模型的類型

1線性規劃
2非線性規劃
3正數規劃
4"0-1"規劃

?二? 線性規劃1

問題一:合理利用線材問題
現在要做100套鋼架,每套用長為2.9m,2.1m,1.5m的元鋼各一根,已知原料長7.4m,問應該如何進行下料使用的原材料更小



首先我們要知道我們這個題目明顯是一個取最優解的問題,那么就是一個切割最優問題
其次就要去找題目里面的未知量,找到未知量,才可以構建出模型
模型的確定是根據目標函數和約束條件確定的

為什么是線性規劃
我們需要確定如何從7.4米長的原料中切割出所需的2.9米、2.1米和1.5米的元鋼,以最小化浪費的材料。這個問題可以表示為一個線性規劃問題,因為:

  • 目標函數是線性的:我們的目標是最小化使用的原料根數,即 x1?+x2?+x3?+x4?+x5?+x6?,這是一個線性函數。

  • 約束條件是線性的:我們需要滿足切割出的元鋼總數至少為100根的條件,這些條件可以表示為線性不等式,例如 2.9*x1?+2.9*2x2?+2.9x5?≥100。

  • 變量是非負的:切割的套數 xi? 必須是非負整數。

那么我們知道這些未知量了,我們就要構建模型,首先我們來構建一個表格

方案1方案2方案3方案4方案5
2.912??1??
2.1????221
1.5312??3

首先我們有這么多種的方案,每一個方案構建的總值都是小于7.4m的
這里講講為什么不考慮使用2.9 2.1 1.5各自取一根不加?
📌 結論

  1. 單看浪費大小不夠,要考慮整體優化
  2. 如果一個方案的浪費比其他方案都大,通常不會被選入最優解
  3. 有些方案即使浪費稍多,但可能是拼湊 100 套鋼架的“必要補充”,可以加入
  4. 最好的方法是用整數規劃(ILP)求解,讓計算機自動決定是否要用某個方案

💡 所以,加不加 6.5m 方案?可以加,但最終讓計算機決定! 🚀
因為我們看倒數第二個,這個是已經到7.1了,之前都是7.4,7.3,7.2,這個是7.1所以加入,但是我們到第五種方案的時候已經到達了6.6,跨度很大,這個時候,我們就取這個,首先我們電腦是會自己判斷這個方案取不取的,這個時候我們加上是為了避免電腦取最優解要用到,保險,這個時候,其實沒有必要加這個方案六,每個都取一根,因為我們已經有一個保險的了

即使你加了也沒事,因為這個電腦可能不會選擇,不考慮這個方案,我們這個題目是要減少浪費的

那么我們要怎么判斷是否要加上方案呢?以下是al分析,作者先記下來,方便下次復習看
📌 原則 1:能否減少浪費?

  • 計算當前已有方案的最小浪費(例如,方案 2 只浪費 0.1m)。
  • 如果你的新方案浪費比所有已知方案都多(例如浪費 0.9m),那它幾乎不會被選入最優解。
  • ? 選擇浪費更少的方案,? 排除浪費更多的方案

示例對比(假設現有方案最小浪費 0.1m):

方案切割方式總長浪費
方案 22.9m ×2 + 1.5m ×17.3m0.1m ?(最優之一)
方案 32.1m ×2 + 1.5m ×27.2m0.2m ?
方案 52.1m ×1 + 1.5m ×36.6m0.8m ?(可能需要)
你的方案2.9m ×1 + 2.1m ×1 + 1.5m ×16.5m0.9m ?(比 0.8m 更差,不需要)

🔍 如果新方案的浪費比已有方案大,基本就不會被選取

📌 原則 2:能否幫助滿足 100 套需求?

即使方案本身浪費稍多,但如果它能讓其他方案更好地拼接成 100 套,也可能有用!

如何判斷?

  1. 嘗試去掉某個方案,看看是否還能剛好滿足 100 套需求。
  2. 如果去掉某個方案會導致解不可行,說明它是必要的,即使它浪費稍多。
  3. 如果所有方案能湊夠 100 套,而某個方案總是沒被選中,那它可以去掉

💡 結論:如果一個方案不會被用到,或者可以被更優的方案替代,就不取!

📌 實踐方法:讓 ILP 自動決定

如果你不確定某個方案是否應該加入,可以讓整數規劃(ILP)自動決定

  1. 先把所有可能的方案(包括 6.5m 方案)都放進去
  2. 讓 ILP 計算最優解,如果某個方案沒有被選取,說明它不是最優的。
  3. 查看最終結果,看看哪些方案真正被使用了

接下來我們就要把這個模型轉換到這歌軟件上進行操作

接下來我們就要用到這個LINGO來編寫
首先這個sets:和endsets是表示定義一個aa集合,aa集合里面有x這個變量,然后這個1..5就是這個變量的下標

然后這個min就是求解最小值,@sum表示求和,遍歷集合aa的里的i,然后緊接著根據這個aa(i)遍歷里面的變量
也就是遍歷里面aa里面的i,然后這個后面這個是aa集合里面的變量,隨著者aa里的i進行改變
下面就是一些約束條件了

@gin(x(i)) 指定 x(i) 必須是整數變量,然后for循環就是遍歷這里面的變量,這些變量的值不可以是小數,而是整數

最后就輸出90根鋼鐵了

三? 線性規劃2

問題二? 某晝夜服務的公交路線每天個時間區段都需要的工作人員如下表格,設工作人員分別再各個時間區段一開始上班,并連續工作8小時,問該公交至少需要多少工作人員
?

班次時間需要人數
16:00-10:0060
210:00-14:0070
314:00-18:0060
418:00-22:0050
522:00-2:0020
62:00-6:0030

接下來我們要分這個題目?
首先我們題目問的是總共的工作人員最少,那么就是每個時間段的人我都是不知道那么是多少,刪一個題目每一根鋼材我都是知道的,我只需要設置出方案數量,然后把這些方案給規劃起來求出值
所以我們這里設置的未知量就是每一個時間段的人數,考慮這里面的未知量

接下來我們就分析出了模型,接下來我們就可以編程了


?編程答案

Sets:aa /1..6/: y;bb/1..6/: x;
Endsetsdata:x = 60,70,60,50,20,30;
enddataMin = @sum(aa(i): y(i));y(1) + y(6) >= x(1);
y(2) + y(1) >= x(2);
y(3) + y(2) >= x(3);
y(4) + y(3) >= x(4);
y(5) + y(4) >= x(5);
y(6) + y(5) >= x(6);! 變量必須是整數;
@for(aa(i): @gin(y(i)));

這樣才是正確的,答案為14

?三 0-1規劃

在一個公司在市東南西三區建立門市部,有7個位置點(Ai,i=1.2.3...7)可供選擇,規定:
1)在東區,由A1 A2 A3三個點至多選擇兩個
2)在西區,由A4 A5兩個點至少選擇一個
3)在南區,由A6 A7兩個點至少選擇一個
如果選用Ai點,設備投資估計為bi元,每年獲利利潤估計為ci元,但是投資總量不可以超過M元,問應該選擇哪幾個點建立門市部使得年利潤最大

首先這個就是典型的0-1問題,每一個點我們都有選擇和不選擇,1就是選擇,0就是不選擇
那么我們就要考慮怎么選擇就好了

接下來我們就只需要編程就好了

sets:aa/1..7/:b,c,x;
endsetsdata:c = 1,5,7,4,6,8,9; b = 12,56,45,34,32,78,89;M = 200;
enddatamax = @sum(aa(i):c(i)*x(i));
x(1) + x(2) + x(3) <= 2;
x(4) + x(5) >=1;
x(6) + x(7) >=1;
@sum(aa(i):b(i)*x(i)) <= M;
@for(aa(i):@bin(x(i)));

?1? for循環的錯誤使用

@sum(@for(aa(i):b(i)*x(i))) <= M;

這樣是不對的,sum里面已經隱式包括了相加的迭代,所以這么寫會出現語法錯誤?


2? 錯誤提示欄的報錯

這個通常是我么缺少了右括號才有的錯誤

這里的bin函數是直接隨機取值,然后轉化為01,這樣就可以運用到0-1規劃


總結

首先我們學習到了線性規劃和0-1規劃
0-1規劃還是很好理解,但是這個線性規劃還是有點抽象

首先第一個鋼鐵問題就是取走最優的部分,你可以看到這個就是把資源浪費最少的放上去,然后最后一個弄一個保險的就好了

第二個就是找出安排時間的問題,我們只需要把相鄰的時間段弄出來,然后最后算出最后人數的最小值就好了因為這個是一環扣著一環的

你只需要把問題利用數學模型描述出來,編程就會自動幫你跑出來,也就是C++里面的抽象

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

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

相關文章

Vulkan視頻解碼decode顯示display之同步

在ReleaseDisplayedPicture函數中消耗圖片資源并且顯示display完成&#xff0c;設置兩個標志m_hasConsummerSignalFence true 和m_hasConsummerSignalSemaphore true virtual int32_t ReleaseDisplayedPicture(DecodedFrameRelease** pDecodedFramesRelease, uint32_t nu…

網絡空間安全(32)Kali MSF基本介紹

前言 Metasploit Framework&#xff08;簡稱MSF&#xff09;是一款功能強大的開源安全漏洞檢測工具&#xff0c;被廣泛應用于滲透測試中。它內置了數千個已知的軟件漏洞&#xff0c;并持續更新以應對新興的安全威脅。MSF不僅限于漏洞利用&#xff0c;還包括信息收集、漏洞探測和…

設計模式學習記錄

設計模式23種 創建型抽象工廠模式工廠模式生成器模式原型模式單例模式 結構型適配器模式橋接模式組合模式裝飾模式外觀模式享元模式代理模式 行為型責任鏈模式命令模式解釋器模式迭代器模式中介者模式備忘錄模式觀察者模式狀態模式策略模式模版方法模式訪問者模式 創建型 與對…

2.5 python接口編程

在現代軟件開發的復雜生態系統中&#xff0c;不同系統、模塊之間的交互協作至關重要。接口編程作為一種關鍵機制&#xff0c;定義了組件之間的通信規范與交互方式。Python 憑借其卓越的靈活性、豐富的庫資源以及簡潔易讀的語法&#xff0c;在接口編程領域占據了重要地位&#x…

mesh開發解析

開源的Mesh網絡協議棧及相關項目&#xff1a; 1.B.A.T.M.A.N.(Better Approach to Mobile Ad-hoc Networking)? 簡介&#xff1a;B.A.T.M.A.N.是一種用于多跳自組織網絡的路由協議&#xff0c;適用于無線Mesh網絡。它通過優化數據傳輸路徑&#xff0c;確保網絡的高可靠性和動…

PyTorch PINN實戰:用深度學習求解微分方程

在人工智能與計算數學的交匯點&#xff0c;物理信息神經網絡&#xff08;Physics-Informed Neural Networks&#xff0c;PINN&#xff09;正引領著一場求解微分方程的革命。傳統上&#xff0c;微分方程是描述自然現象和工程問題中各種關系的重要工具&#xff0c;但其求解往往依…

【WiFi 7核心技術及未來挑戰】

作為剛剛開始從事這一領域的人&#xff0c;淺淺學習了一下WiFi 7&#xff08;IEEE 802.11be&#xff09;。Wi-Fi 7發展迅速&#xff0c;提供前所未有的速度、更低的延遲和更高的可靠性。但從頻譜政策到能效挑戰&#xff0c;再到成本&#xff0c;仍有許多問題亟待解決。 Wi-Fi 7…

Oracle Linux Server 7.9安裝fail2ban

yum search oracle-epel-release yum install oracle-epel-release-el7 search fail2ban yum install fail2ban nano /etc/fail2ban/jail.d/00-firewalld.conf # defalut這里是設定全局設置&#xff0c;如果下面的監控沒有設置就以全局設置的值設置。 [DEFAULT] # 用于指定哪…

目標在哪里?——尋找人生的意義與方向

在職場中&#xff0c;許多人都會經歷這樣的困惑&#xff1a;工作看似順利&#xff0c;卻逐漸失去了成就感和成長感。一位在500強企業工作的學員就遇到了這樣的問題。她曾考慮過轉型做培訓&#xff0c;但苦于找不到明確的切入點&#xff0c;對未來的目標感到迷茫。她不禁問自己&…

C++類與對象——拷貝構造與運算符重載

拷貝構造函數和賦值運算符重載就是C類默認六個函數之二。 拷貝構造函數&#xff1a; 如果?個構造函數的第?個參數是自身類類型的引用&#xff0c;且任何額外的參數都有默認值&#xff0c;則此構造函數 也叫做拷貝構造函數&#xff0c;也就是說拷貝構造是?個特殊的構造函數…

破碎的誓言

破碎的誓言 在秋風的呢喃中&#xff0c;落葉輕嘆&#xff0c; 昔日的誓言&#xff0c;如煙消散。 你的眼眸&#xff0c;曾是我星辰的指引&#xff0c; 如今&#xff0c;卻成了最深的迷惘。 欺騙的利刃&#xff0c;刺穿了信任的堡壘&#xff0c; 我的心&#xff0c;如裂開…

AD畫板學習

AD畫板 01 課程簡介及學習目標 &#xff08;1&#xff09;能熟練的新建項目文件、原理圖文件、PCB文件且修改文件名&#xff0c;并知道文件保存的位置&#xff1b; &#xff08;2&#xff09;會設置原理圖編輯器的工作環境&#xff0c;會自底向上繪制層次原理圖&#xff1b; …

Linux:進程程序替換

目錄 前言 一 進程程序替換的概念 二 進程程序替換的原理 三 為什么需要進行進程程序替換 四 如何進行進程程序替換 1. 進程替換函數 ? execl()函數 ?execv()函數 ?execlp()函數 ?execle()函數 ?execve()* 前言 一般情況下&#xff0c;對應的語言寫的程序只…

基于變分推理與 Best?of?N 策略的元 Prompt 自動生成與優化框架

摘要 本文提出了一種融合變分推理與 Best?of?N 策略的元 Prompt 自動生成與優化框架&#xff0c;通過高度參數化的模板、隨機擾動采樣及多指標評分機制&#xff0c;實現從初始提示生成到最終輸出的動態優化。同時&#xff0c;針對實際應用中對自適應參數調整、深層語義理解、…

Umi-OCR 全家桶

介紹&#xff1a; 下載 訪問官網地址 https://github.com/hiroi-sora/umi-ocrhttps://github.com/hiroi-sora/umi-ocr 點擊下載&#xff08;.exe 文件 安裝即可&#xff09; 桌面使用 安裝完畢后去安裝路徑下點擊 Umi-OCR.exe &#xff08;默認不會生成桌面的快捷方式&…

2023南京理工大學計算機復試上機真題

2023南京理工大學計算機復試上機真題 2023南京理工大學計算機復試機試真題 歷年南京理工大學計算機復試上機真題 在線評測&#xff1a;傳送門&#xff1a;pgcode.cn 括號匹配二 題目描述 苗苗今天剛剛學會使用括號&#xff0c;不過他分不清小括號&#xff0c;中括號&#…

Conda 常規用法指南

Conda 常規用法指南 1. Conda 簡介 Conda 是一個開源的包管理和環境管理系統&#xff0c;主要用于 Python 和其他編程語言的開發環境。它能夠方便地安裝、更新和管理依賴項&#xff0c;使得不同項目可以使用不同的 Python 版本和庫。 2. Conda 環境管理 2.1 創建新的環境 conda…

非零初始條件系統的傳遞函數分析

非零初始條件系統的傳遞函數分析 在傳遞函數的定義中&#xff0c;通常假設系統滿足零初始條件。然而在實際應用中&#xff0c;很多系統需要處理非零初始狀態。為了探討這一問題&#xff0c;我們以一個一階微分方程為例進行分析。 一、一階系統的分析 考慮以下一階微分方程&a…

centos7安裝時采用的默認分區(比如:/dev/sda3的對應掛載點是/),如何對系統擴容?

?非LVM分區擴容方案? 若 /dev/sda3 是?非LVM分區?且存儲重要數據&#xff0c;可通過 ?直接擴展分區容量? ?調整文件系統? 實現擴容&#xff0c;無需重建LVM或格式化分區?。以下是具體步驟&#xff1a; ?1. 擴展物理磁盤&#xff08;虛擬機場景&#xff09;? ?關…

Axios簡單說明,快速上手

Ajax&#xff1a;異步的JavaScript和XML 作用&#xff1a; 數據交換異步交互 Axios&#xff1a;就是對原生Ajax進行封裝&#xff0c;簡化書寫&#xff0c;快速開發 使用邏輯&#xff1a; 首先要安裝Axios&#xff0c;可以通過npm在項目中安裝&#xff1a; 打開命令行工具…