日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

数学建模——01规划 / 线性规划 (工具:matlab + lingo,算法:Folyd)

發布時間:2023/12/10 循环神经网络 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学建模——01规划 / 线性规划 (工具:matlab + lingo,算法:Folyd) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??💺

文章目錄

  • 一、前驅知識準備
    • 1、Lingo簡介
    • 2、01規劃、整數規劃、(非)線性規劃等規劃的區別
    • 3、優化(/規劃)模型的組成
      • (1)目標函數
      • (2)決策變量
      • (3)約束條件
    • 4、Lingo模型的基本組成
      • (1)集合定義部分
      • (2)數據段
      • (3)初始化段
      • (4)計算段
      • (5)目標函數和約束條件
  • 二、樣例:國賽數模11年B題《交巡警服務平臺的設置與調度》的第一問(前2小問)
    • 1、問題描述:
    • 2、解題思路
    • 3、數據預處理
    • 4、第①小問 模型的建立和求解
    • 5、第②小問 模型的建立和求解
  • 三、總結:
  • 四、參考附錄:


敲到碼窮處,坐看云起時。?? ?? ??

數學建模系列文章——總結篇:《數模美一國一退役選手的經驗分享[2021紀念版]》.


🍬

一、前驅知識準備

1、Lingo簡介

??LINGO是 Linear Interactive and General Optimizer 的縮寫,即“交互式的線性和通用優化求解器”。

??Lingo超強的優化計算能力在很多方面(線性規劃、非線性規劃、線性整數規劃、非線性整數規劃、非線性混合規劃、二次規劃等)比matlab、maple等強得多。

??Lingo編程簡潔明了,數學模型不用做太大的改動,便可以直接用Lingo語言編程呈現,十分直觀


2、01規劃、整數規劃、(非)線性規劃等規劃的區別

?? ?? ??

??①0-1規劃 是決策變量僅取值0或1的一類 特殊的整數規劃

?? 補充:0-1 變量可以數量化地描述諸如開與關、取與棄、有與無等現象所反映的邏輯關系。因此 0-1 規劃非常適合解決如工廠選址 、生產計劃安排、背包問題、人員安排等多種問題。

??②整數規劃 是指規劃中的變量(全部或部分)限制為整數。

??補充:若在線性模型中,變量限制為整數,則稱為整數線性規劃。所流行的求解整數規劃的方法往往只適用于整數線性規劃。從約束條件的構成又可細分為線性,二次和非線性的整數規劃。

??③線性規劃(Linear programming,簡稱 LP ),是運籌學中的一個重要分支,它是一種數學方法。研究 線性約束條件線性目標函數 的 極值問題 的數學理論和方法。

??④非線性規劃 是一種求解目標函數或約束條件中有一個或幾個 非線性函數 的最優化問題的方法。


3、優化(/規劃)模型的組成

(1)目標函數

??(1)目標函數:一般表示成求 某個數學表達式 的 最小值最大值

(2)決策變量

??(2)決策變量:目標函數值 取決于 哪些變量

(3)約束條件

??(3)約束條件:對變量附加一些條件限制(通常用等式或不等式來表示)。


4、Lingo模型的基本組成

(1)集合定義部分

(2)數據段

(3)初始化段

(4)計算段

(5)目標函數和約束條件

??:詳細說明可參考本文最后的 參考附錄【2】 📚。


二、樣例:國賽數模11年B題《交巡警服務平臺的設置與調度》的第一問(前2小問)

1、問題描述:

??該市中心城區A的交通網絡和現有的20個交巡警服務平臺的設置情況如下圖所示。(相關數據可在本文最后 參考附錄【1】下載)

??①現在請為各交巡警服務平臺分配管轄區域,使其在所管轄的范圍出現突發事件時,盡量能在3分鐘內有交巡警(警車時速為60km/h)到達事發地。

??②對于重大突發事件,需要調度全區20個交巡警服務平臺的警力資源,對進出該去的13條交通要道實現快速全封鎖。實際中一個平臺的警力最多封鎖一個結點,請給出該區交巡警服務平臺合理的調度方案。【注:13條交通要道即圖中13個紅點。】




2、解題思路


??①根據實際情況,我們首先要對數據進行處理,利用Folyd算法,借助 matlab 軟件對其進行求解,求出20個交巡警服務平臺到各個結點之間的實際距離
??然后建立優化模型,找出目標函數,并找出相應的約束條件,借助 lingo 對其進行求解,得出結論。


??②由上面那張圖,我們明顯地可以看出,有些結點到所有的交巡警平臺的距離都不會小于3km,所以顯然不能滿足 “3分鐘” 那個條件(因為車速60km/h→1km/min)。故我們考慮到交巡警平臺的重新鋪設,將20個交巡警平臺重新在交通網絡中鋪設,得到最優結果。


??③我們設定一個正向型指標,使增設平臺的目標就是:讓該 指標 分數最大。



3、數據預處理


Folyd算法如下:

??Step1:構造 0-1 矩陣 A0

??來存放各節點之間的關系,其中,aij = 0 表示 i,j 兩節點之間 沒有 直接連接。 a ij = 1 表示 i,j 兩節點之間直接連接。

??Step2:遞推產生一個矩陣序列 A0、A1、A2、… 、Ak、Ak+1、… 、An-1、An。其中 Ak ( i , j ) 表示從節點 i 到結點 j 的路徑所經過的節點序號不大于 k 的最短路徑長度。
??計算時用的迭代公式為:

Ak(i,j)=min(Ak?1(i,j),Ak?1(i,k)+Ak?1(k,j))A_k(i,j)=min(A_{k-1}(i,j),A_{k-1}(i,k)+A_{k-1}(k,j))Ak?(i,j)=min(Ak?1?(i,j),Ak?1?(i,k)+Ak?1?(k,j))

??其中,k 為迭代次數, i, j, k = 1, 2, 3, … , n
??最后,當 k=n 時,An 即是各節點之間的最短距離。

??注: Table是個 n*m 的結構體表 ,封裝了題目里面的所有數據。
??其構造的內容詳見 這一篇文章《數學建模——matlab繪制 地圖 散點圖連線圖 (運用plot、scatter、struct、xlsread等函數)》
??鏈接: https://blog.csdn.net/Wang_Dou_Dou_/article/details/119007126?spm=1001.2014.3001.5501.
??Folyd 的原理可以參考這篇《算法篇——詳解 弗洛伊德(Folyd)算法【用 C/C++ 和 matlab 實現】》
??鏈接:https://blog.csdn.net/Wang_Dou_Dou_/article/details/119485893?spm=1001.2014.3001.5501.

??通過 matlab 編程求解如下:

A_0 = zeros(92,92); % 初始化 注:A區域有92個節點 for i=1:92next_point = Table(i).NextJieDian; % 注:Table(i).NextJieDian 是一個 1*n 的矩陣for j=1:length(next_point)if 1 <= next_point(j) && next_point(j) <= 92A_0(i,next_point(j)) = 1;endend endzuo_x_A = zeros(92,1); zuo_y_A = zeros(92,1); for i=1:92 % 篩選出 A 區域里面的數據點zuo_x_A(i) = Table(i).X;zuo_y_A(i) = Table(i).Y; endX_0 = zeros(92,92); for i=1:92 % 計算A區域中 兩兩結點之間的距離for j=1:92X_0(i,j) = sqrt( ( zuo_x_A(i) - zuo_x_A(j) ).^2 + ( zuo_y_A(i) - zuo_y_A(j) ).^2 ); end end Fal_X = X_0 .* A_0; % 只保留 兩個結點有連線的 "距離值"for i=1:92for j=1:92if A_0(i,j) == 0 % 距離等于0,表示網絡中兩節點之間不相連,則表示距離無窮大Fal_X(i,j) = 99999; endend endfor i=1:92Fal_X(i,i) = 0; % 自身到自身的節點距離為0 end% Folyd算法: path = zeros(92); for k=1:92for i=1:92for j=1:92if Fal_X(i,j) > Fal_X(i,k) + Fal_X(k,j)Fal_X(i,j) = Fal_X(i,k) + Fal_X(k,j); % 修改最短距離path(i,j) = path(k,j); % 記錄最短途徑endendend end

??運行結果如下


??Fal_X 表示 節點 i 到節點 j 之間的最短距離。path 記錄著 節點 i 到節點 j 的最短途徑上, 結點 j 的上一結點 k。




4、第①小問 模型的建立和求解

??根據上述分析和數據處理,明顯有些節點到所有交巡警服務平臺的距離都不會小于 3km 。所以不能滿足那個 “3分鐘”(因為車速60km/h→1km/min) 的要求。

??所以,我們建立以下模型。并且在滿足 “3分鐘之內盡量到達” 的條件上,再使得對于少數不能感趕到的,我們盡量使其趨于最短時間。

說明:

??<1> xijx_{ij}xij? 是 0/1 變量,當 xij=1x_{ij}=1xij?=1 表示第 j 個節點分配在第 i 個交巡警服務平臺的管轄內;當 xij=0x_{ij}=0xij?=0 表示第 j 個節點 沒有 分配在第 i 個交巡警服務平臺的管轄內。

??<2> LijL_{ij}Lij? 是 結點 i 到 結點 j 的最短距離。

??<3>目標函數為 ∑i=120xijLij,(j=1,2,...,92)\sum \limits_{i=1}^{20} x_{ij}L_{ij} ,(j=1,2,...,92)i=120?xij?Lij?,(j=1,2,...,92) 表示第 j 個節點距離第 i 個交巡警服務平臺距離最近時,就將第 j 個節點分配在第 i 個交巡警服務平臺的管轄區域內。并 盡量 使交巡警平臺 能滿足 “3分鐘” 的那個條件。

??<4> ∑i=120xij=1,(j=1,2,...,92)\sum \limits_{i=1}^{20} x_{ij}=1 ,(j=1,2,...,92)i=120?xij?=1,(j=1,2,...,92) 表示每個節點(總共92個) 只能歸屬于一個交巡警服務平臺的管轄。

??<5> ∑j=192xij≥1,(i=1,2,...,20)\sum \limits_{j=1}^{92} x_{ij} ≥1,(i=1,2,...,20)j=192?xij?1,(i=1,2,...,20) 表示每個交巡警服務平臺至少管轄一個節點。【也就是大家也都得干干活】

??用 lingo 軟件對其進行求解:

model: sets: ! 集合段; R/1..92/; S/1..20/; T/1..92/; JuZhen(S,T): x,L; BigJuZhen(R,T):Fal_X; endsetsdata: ! 數據段; Fal_X = @ole('C:\Users\ASUS\Desktop\CSDN\6交巡警\cumcm2011B附件2_全市六區交通網路和平臺設置的數據表.xls','data_1'); ! 向Excel讀數據 @ole('C:\Users\ASUS\Desktop\CSDN\6交巡警\cumcm2011B附件2_全市六區交通網路和平臺設置的數據表.xls','結果') = X; ! 向Excel寫數據 enddatacalc: ! 計算段; @for( R(i)| (i #LE# 20): @for( T(j): L(i,j) = Fal_X(i,j) ) ); endcalcmin = @sum( JuZhen: x*L ); ! 目標函數;! 以下3個函數是約束條件; @for( T(j): @sum( S(i):x(i,j) ) = 1 ); @for( S(i): @sum( T(j):x(i,j) ) >= 1 ); @for( JuZhen: @bin(x) ); ! 01變量 end

??運行結果如下:(已轉到 Excel )


??后續的可視化處理,即用 matlab 軟件對其進行畫圖:

x = xlsread('cumcm2011B附件2_全市六區交通網路和平臺設置的數據表.xls',7,'A1:CN20') table_2 = struct([]); % 結構體初始化 for i=1:20table_2(i).PingTai = []; endfor i=1:20for j=1:92if x(i,j) == 1table_2(i).PingTai = [ table_2(i).PingTai,j ]; % 將 x 的數據讀到結構體endend end Save = zeros(20,2); % 初始化 for i=1:20Z = cell2mat( struct2cell( table_2(i) ) ); % 轉換操作:結構體 → 元胞數組 → 矩陣biggest_dis = 0 ;x0 = Table(i).X;y0 = Table(i).Y;for j=1:length(Z)x1 = Table(Z(j)).X;y1 = Table(Z(j)).Y;dis = sqrt( ( x0 - x1 ).^2 + ( y0 - y1 ).^2 );if dis > biggest_disSave(i,1) = dis; % 記錄最長時間(也就是最短距離,因為車速是1km/h)Save(i,2) = j; % 記錄交通路口編號endend end xlswrite('cumcm2011B附件2_全市六區交通網路和平臺設置的數據表.xls',Save,9,'M2:N22'); hold on; new_line = cell2mat( struct2cell( table_2(1) ) ); % 結構體 → 元胞數組 → 矩陣 for j=1:length(new_line) % 給第一個交巡警服務平臺畫管轄區域xx = [ Table(1).X,Table(new_line(j)).X ] ;yy = [ Table(1).Y,Table(new_line(j)).Y ] ;scatter(xx(:,2),yy(:,2),10,'filled','m');plot(xx,yy,'m-.','LineWidth',1) endnew_line = cell2mat( struct2cell( table_2(2) ) ); for j=1:length(new_line) % 給第二個交巡警服務平臺畫管轄區域xx = [ Table(2).X,Table(new_line(j)).X ] ;yy = [ Table(2).Y,Table(new_line(j)).Y ] ;scatter(xx(:,2),yy(:,2),10,'filled','r');plot(xx,yy,'r-.','LineWidth',1) end

??運行結果如下:(注:只畫出兩個交巡警服務平臺的管轄區域,即 粉色 和 紅色)




5、第②小問 模型的建立和求解

???? ?? ??

??首先,我們用 matlab ,統計出13個節點(A區的13個出入口)和20個交巡警服務平臺的距離表。

Model_2 = zeros(20,13); t = 1; ans = []; for i=1:92if Table(i).A_Qu_ChuRuKou == 1for j = 1:20Model_2(j,t) = Fal_X(j,i); % 獲取對應的最短距離endt = t + 1;ans = [ans , i]; % 獲取編號end end Model_2 ans xlswrite('cumcm2011B附件2_全市六區交通網路和平臺設置的數據表.xls',Model_2,9);

??運行結果如下:(已用 Excel 作處理)


??:①表中的單位是mm。(比例尺1:100000)

????②最上面一排項目中,括號外是打表的序號,括號內是A區13個出入口的編號。

??接著,考慮到題目中所說的 “快速全面封鎖” 這點,而時間的長短是由 所有距離中的最長距離 決定的,故不能建立 所有路程之和最短的模型,而要建立一個 時間最短模型。因為制約時間的并非是所有路程之和而是其中的最長路徑。

??所以建立的模型如下:

說明:
??<1> L0 為 13個A區出入口分別到20個服務平臺的 13 個最短距離中的 最大值。

??<2> ∑j=113xij≤1,(i=1,2,...,20)\sum \limits_{j=1}^{13} x_{ij}≤1 ,(i=1,2,...,20)j=113?xij?1,(i=1,2,...,20) 表每個交巡警平臺只能封鎖一個節點。

??<3> ∑i=120xij=1,(j=1,2,...,13)\sum \limits_{i=1}^{20} x_{ij}=1 ,(j=1,2,...,13)i=120?xij?=1,(j=1,2,...,13) 表示每個A區出入口(總共13個) 都必須有交巡警進行封鎖。

??然后,我們用 lingo 編程求解。

model:sets: S/1..20/; T/1..13/; link(S,T): x,L; endsetsdata: L = @ole('C:\Users\ASUS\Desktop\CSDN\6交巡警\cumcm2011B附件2_全市六區交通網路和平臺設置的數據表.xls','dis'); !讀數據; @ole('C:\Users\ASUS\Desktop\CSDN\6交巡警\cumcm2011B附件2_全市六區交通網路和平臺設置的數據表.xls','TRY') = x; !寫數據; L0 = 57.01; !從Excel直接獲取的數據; enddata min = L1;L1 >= L0;@for( S(i): @SUM( T(j): x(i,j) ) <= 1 );@for( T(j): @SUM( S(i): x(i,j) ) = 1 );@for( link: x*L <= L1 );@for( link: @bin(x) );end

??運行結果如下:(已用 Excel 作處理)


??:lingo解得的 L1 = 80.15,故最長的路程為第29個節點,但只有 8015m ,并且滿足將各個節點全部封鎖的條件。所以從 時間的角度 來看,該模型是值得肯定的。【其實這里有一個 對比方案 ,但我沒寫,那個對比方案是 以13個A區出入口20個服務平臺的距離和最小 為規劃目標。但這個對比方案的模型計算結果沒 80.15 好。】




三、總結:

??在做 優化(/規劃)模型 的題目時,一般用 lingo 要方便一點。但在此之前,我們一般要進行一下 數據預處理

??之后,我們要 找到并建立 以下三個東西:

????(1)目標函數
????(2)決策變量
????(3)約束條件

??最后,我沒有詳細地闡述其原理,只闡述了有什么用、怎么用。詳細原理可以參考本文最后的 參考附錄 📚 📚 📚。


四、參考附錄:

[1] 《2011高教社杯全國大學生數學建模競賽賽題 B題 數據》
鏈接: http://www.mcm.edu.cn/html_cn/node/a1ffc4c5587c8a6f96eacefb8dbcc34e.html.

[2] 《數學建模之Lingo基礎知識與應用》
鏈接: https://blog.csdn.net/sunyueqinghit/article/details/81708836.

[3] 《LINGO學習筆記01》
鏈接: https://blog.csdn.net/Temmie1024/article/details/108863568.

[4] 《算法篇——詳解 弗洛伊德(Folyd)算法【用 C/C++ 和 matlab 實現】》
鏈接: https://blog.csdn.net/Wang_Dou_Dou_/article/details/119485893?spm=1001.2014.3001.5501.

數學建模系列文章——總結篇:《數模美一國一退役選手的經驗分享[2021紀念版]》.


純手碼字 碼圖不易,多多支持 🙈🙈

總結

以上是生活随笔為你收集整理的数学建模——01规划 / 线性规划 (工具:matlab + lingo,算法:Folyd)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。