2022年天府杯全国学部数学コンテストモデリングコンテストB、最初の「ジュン」愛の問題解決の全プロセス文書とプログラム

2022 天府杯全国学部数学モデリングコンテスト

質問B 初めての「純」恋

原題の転載:

  最近、ロシアとウクライナの紛争が激化しており、現代の戦争はいまだ人間主導の戦争であり、完全に機械化された戦争状態には至っていないことは言うまでもありません。次に、戦争においては軍需品の補給が非常に重要であり、古代中国の兵法では「兵馬が動く前にまず食糧と草が先だ」という言葉がまさにこの点を体現している。現代の戦争では、兵士は一度に大量の食料や弾薬を持ち込めないことが多く、戦闘が長期化した場合には補給所の兵站部隊を動員して迅速に物資を補充する必要がある。
  ある場所の補給基地の近くに、同時に補給を行う必要がある部隊が 4 つあり、補給基地には A と B の 2 種類の航空機があり、カテゴリ A には 6 機があり、最大積載量13トン、飛行速度260km/h、最大積載量20トン、飛行速度50km/hの飛行機が10機あり、飛行機は軍隊に直線で物資を投下することができ、物資を投下するために一度に行ける目的地は 1 つだけであり、配達後は補給ステーションに戻り、次の部隊に物資を投下する必要があります。
  各ユニットは必要以上の供給を受け入れることができますが、必要な量の 150% を超える供給を受け入れることはできません。また、航空機の積み下ろしにも時間がかかり、クラスA機の積み下ろしには20分、クラスB機の積み下ろしには30分、積み下ろしには40分かかります。
  緊急の軍事情勢のため、すべての物資の配達時間は部隊の最新の需要時間を超えてはなりません。4つの部隊の座標、要求物資の量、最新の要求時間については表1を参照してください。ここで、補給ステーションは航空機派遣の意思決定者としてあなたを招待します。次の問題を解いてください:
  (1) 古い補給ステーションが敵によって爆撃され、新しい補給ステーションを緊急に建設する必要があるとします。他の要素を考慮せず、各ユニットの最大サポートのみを考慮して、新しい補給ステーションの位置を決定するための適切な数学モデルを確立してください。
  (2) さまざまな理由により、新しい補給ステーションが座標 (10,30) に建設されます。航空機の配備計画を決定するための数学モデルを確立してください。
  (3) 各部隊は上官からの要請を受け、物資を受け取った後も任務遂行のため次の場所へ移動を続ける必要があるため、必要物資量の110%を超える物資を運ぶことはできず、取り扱いプロセス中のクラス A 航空機の 5% ~ 10% の損失、クラス B 航空機の損失は 3% ~ 7% です。積み替え計画を決定するための数学的モデルを確立してください。

ここに画像の説明を挿入

ソリューションプロセス全体の概要 (要約)

  戦争において軍需物資の補給は非常に重要な任務であり、戦争が長期戦に陥った場合、補給所の兵站部隊を動員して迅速に物資を補給する必要があるため、軍需物資の問題を研究することは非常に有意義である。戦争物資のスケジュール調整。
  問題 1 では、まず、トピックの要件を対応する数学的問題に変換し、新設の補給基地から各軍までの最短の総距離が各軍への最大の支援を表すことから、制約のない最適化モデルを作成できます。が確立され、独立変数は新しく建設された供給ステーションの位置座標です。この論文では、制約なし問題を解くために、勾配降下法とホエール最適化アルゴリズムという 2 つの方法が使用されます。2 つのアルゴリズムの結果はそれぞれ (10.49, 5.05) と (9.0055, 4.9992) です。比較すると、クジラ最適化アルゴリズムによって解決された最適な位置は正確に A122 であることがわかります。したがって、戦争要因を考慮すると、補給ステーションはが (10.49, 5.05 ) に設定されている場合、4 つのユニットまでの合計距離は 15.3737km になります。
  問題 2 では、まず、議題で必要とされる決定された航空機の寄港計画を、すべての輸送タスクを完了する時間を最小化するように変換し、これを目的関数、最新の需要時間、資材数量要件を超える航空機、および合計として使用します。航空機の数は制約として設定されます。単一目的の整数計画法モデルは、独立変数として 6 機の航空機 A と 10 機の航空機 B を使用してスケジュール スキームを指定します。この質問では、インテリジェントな最適化アルゴリズムでは新しい解を生成するための要件が​​高すぎることを考慮して、モデル 2 を解くために貪欲なアルゴリズムを使用します。2 種類の航空機の属性を組み合わせて、補給ステーションから最も遠い部隊を選択し、毎回の派遣でクラス B 航空機を優先するという貪欲な方法により、解決策の結果は、A102 部隊に 4 台の B 航空機を派遣することになります。 5 機の A 飛行機と 1 機の B 飛行機がユニット A121 に行き、7 機の A 飛行機がユニット B121 に行き、5 機がユニット B404 に行きます。すべてのタスクを完了するための通過時間は 102.01 分です。最後に、グリーディ アルゴリズムのグリーディ メソッドを変更してモデルをテストすると、変更後のグリーディ アルゴリズムでは最短時間を変更することはできませんが、追加のマテリアルの量には影響することがわかり、2 番目のモデルが信頼できることが証明されました。
  問題 3 については、まず、問題 2 のモデルに基づいて、第 2 目的関数として余剰材料の最小化を導入し、制約を超える材料の量を調整し、航空機輸送の過程での損失係数を考慮し、概念を導入します。不確実な損失係数は範囲内の期待値として指定され、多目的整数計画法モデルが確立されます。モデル 3 は多目的最適化問題であるため、モデル 3 では貪欲アルゴリズムには大きな制限があります。この論文では、シミュレーテッド アニーリング アルゴリズムを使用して問題 3 を解決し、輸送タスクを完了するための最小時間を制約条件に変換します。問題の解空間において、アルゴリズムが 150 回の反復後に見つけた最適解は次のとおりです: 2 機の A 飛行機と 3 機の B 飛行機を部隊 A102 に派遣し、4 機の B 飛行機を部隊 A102 に派遣するA122部隊、A機6機、B機1機 航空機はB121部隊へ、A機4機、B機2機はB404部隊へ。さらに、シミュレーテッド アニーリングによって解決された材料の総量は 334.3 トンで、貪欲アルゴリズムの結果の 370.375 トンよりも 10.79% 多く、最短時間は依然として 102.01 分に達する可能性があります。最後に、損失係数の値を調整してパラメータ損失係数の感度テストを実行し、その結果、材料損失の程度が期待値の狭い範囲内で変動する場合、モデル解の結果が影響を受けないことがわかりました。損失の程度は大きく異なりますが、損失の程度が大きすぎる場合、航空機のスケジュール計画が大幅に変更され、すべての輸送タスクを完了する最短時間が46.98%増加します。

モデルの仮定:

  1. 輸送プロセス中に航空機は満載で出発し、航空機が満席のまま出発する状況は存在しないと仮定します。2.
  すべての航空機が同時に離陸および出発できると仮定し、並列処理をサポートします。3
  . . 質問 3 補給ステーションの位置は、2 番目の質問の補給ステーションの位置です;
  4. 飛行中に遅延はなく、デフォルトでは所定の速度で飛行します。

問題分析:

  この質問では、航空機のスケジュールの意思決定者として、3 つの異なる状況で最適化問題を解決する必要があります。この種の純粋な最適化問題を解決するため、問題解決のアイデアは主に 2 つのステップに分かれています: 最初のステップは、トピックの目的関数を明確にし、トピックに必要な制約を見つけることです。2 番目のステップは、モデルを解決するための最適化手法; 問題の制約のない最適化問題については、勾配法の助けを借りて解決することも、インテリジェントな最適化アルゴリズムを使用して解決することもできます。問題 2 の制約付き整数計画問題の場合、最も簡単な解決策は、貪欲ルールを指定し、貪欲アルゴリズムを使用してそれを解決することです。問題 3 については、制約条件の変更と二重目的の選択を考慮する必要があり、本論文ではこれをシミュレーテッド アニーリング アルゴリズムを使用して解決します。
  質問 1 の分析 質問
  1 では、古い補給ステーションが敵によって爆破され、新しい補給ステーションを緊急に建設する必要があると想定されています。他の要素に関係なく、各部隊に最大限の支援を提供できるかどうかだけを考慮します。この質問の考え方は 2 つのステップに分かれています。 1. 各部隊に必要な最大限の支援を提供する意味を決定します
  。という質問によって、駅舎の問題を数学の問題に変換します。添付の表のデータを分析すると、各ユニットの最大サポートは新しいステーションから 4 つのユニットまでの最小合計距離として理解できるため、制約のない最適化モデルを確立できることがわかりました
  。最も主流の方法は、勾配降下法、ニュートン法、準ニュートン法などの勾配ベースの方法と、進化アルゴリズムや群知能アルゴリズムなどの非勾配ベースの方法です。一般的な方法には、シミュレーテッド アニーリングが含まれます。 、遺伝的アルゴリズム、粒子群アルゴリズムなどがあるが、本論文では、従来のアルゴリズムよりも強力な解決能力を持つ群知能最適化アルゴリズム、つまりクジラアルゴリズムを選択する。2つのアルゴリズムの結果を比較および分析し,異なる現実的な状況における駅建設計画を示した。
  質問 2 の分析
  質問 2 では、さまざまな理由により、新しい補給ステーションが座標 (10, 30) に建設されます。航空機の配備計画を決定するための数学モデルを確立しましょう。新しい補給ステーションの座標がわかったら、与えられた座標を使用して、航空機が補給物資を配達するようにスケジュールを設定できます。航空機のスケジュールをどのように設定するかについては、2 番目の質問を決定する必要があります。最初の質問と同様に、航空機のスケジュールの問題を計画の問題に変換するには、まず適切な目的関数と制約を見つけなければなりません。この記事では、すべての資材の配送時間がユニットの最新の需要時間を超えてはいけないことや、すべての航空機の最大積載量など、さまざまな要因を考慮する必要があります。明らかに、これは整数計画法モデルであり、独立変数は 16 機の航空機のスケジュール状況です。目的関数のタイトルは明確ではありませんが、実際の状況を考慮して輸送時間を最小化する目的関数が決定されています。整数計画法を解く方法としては、シミュレーテッドアニーリングやグリーディアルゴリズムなどさまざまな方法がありますが、最適な解を選択するにはタイトルで与えられた制約を考慮する必要がありますが、本稿では計画モデルを解くためにグリーディアルゴリズムを使用します。グリーディ アルゴリズムは、シミュレーテッド アニーリング アルゴリズムと比較して単純であり、シミュレーテッド アニーリングのように毎回解空間で解を生成する必要はありません。グリーディ アルゴリズムはステップごとに反復され、各ステップが最適化され、最終的な合計結果が最適になります。最後に、貪欲アルゴリズムの結果をテストして分析し、より正確な改善計画を提示します。
  質問 3 の分析
  質問 3 は、質問 2 に基づいて新しい制約を追加するものです。つまり、質問では、各ユニットが物資を受け取った後、任務を実行するために次の場所に移動し続ける必要があることが明確に規定されているため、各ユニットが保管する物資の量は制限されません。指定された必要数量の 110% を超えます。3 番目の質問では、ハンドリング プロセスの損失が新たに追加され、A タイプの航空機の損失と B タイプの航空機の損失が異なるため、モデル解の結果にある程度のランダム性が生じます。このようなランダムな問題に対しては、通常 2 つの解決策があります。1 つ目は、ランダム要因を固定要因に変換して複雑さを軽減することですが、その結果、モデルのロバスト性は強くありません。もう 1 つの方法は、ランダム性を維持することであり、各決定ではランダムな要素を考慮する必要があります。明らかにそうすれば、トピックの難易度が上がります。さらに、3 番目の質問では、最適なスケジューリングは時間的に最適であるだけでなく、スケジューリングの結果も最適である必要があると考え、2 番目の目的関数として余分な材料の最小化を導入し、複数の目的を確立します。整数最適化モデル。解決の難易度を単純化するために、最初に損失係数の値を固定し、最小輸送時間を制約条件に変換することで、二重目的モデルが単一目的モデルになり、シミュレーテッド アニーリング アルゴリズムは次のようになります。モデルを解くために使用され、最後にモデルの損失係数パラメータに対して感度解析が実行されました。

モデルの確立と解決策 論文全体のサムネイル

ここに画像の説明を挿入
ここに画像の説明を挿入

すべての論文については、以下の「QQ 名刺のモデリングのみ」を参照してください。 QQ 名刺をクリックしてください

プログラム コードの一部: (コードとドキュメントは無料ではありません)

1. clc   
2. clear   
3.    
4. % 绘图函数  
5. % draw  
6.    
7. % 求最优位置  
8.    
9. % 鲸鱼算法  
10.% 参数初始化  
11.a = 2; % 初始游动因子的值,后续会不断缩减  
12.MAX_iter = 200; % 迭代次数  
13.iter = 1; % 初始化迭代次数  
14.b = 3; % 螺旋系数  
15.number = 100; % 定义鲸鱼的数量  
16.fitt = zeros(number,1); % 初始化适应度  
17.x = zeros(number,2); % 初始化种群  
18.l_min = ‐100; %自变量下界  
19.l_max = 100; % 自变量上界  
20.for i = 1:number % 初始化种群和适应度  
21.    x(i,1) = l_min + rand(1) * (l_max ‐ l_min);  
22.    x(i,2) = l_min + rand(1) * (l_max ‐ l_min);  
23.    fitt(i) = fit(x(i,:));  
24.end   
25.fit_best = min(fitt); % 记录最优适应度  
26.ind = find(fitt == min(fitt),1);  
27.X_best = x(ind,:); % 记录最优位置  
28.X_BEST = []; % 记录全局  
29.FITT = []; % 记录全局  
30.%% 迭代开始  
31.while iter <= MAX_iter  
32.    for i = 1:number  
33.        if rand() < 0.5 % 采用游动捕食  
34.            a = 2 * (1 ‐ iter / MAX_iter); % 更新游动因子  
35.            r = rand(1,2); % 随机数  
36.            C = 2 * r; % 计算摆动因子  
37.            A =  2 * r * a ‐ a; % 计算收敛因子  
38.            if sqrt(A(1)^2 + A(2)^2) < 1 % 采取包围捕食  
39.                D = abs(C .* X_best ‐ x(i,:)); % 计算最优距离  
40.                x(i,:) = X_best ‐ A .* D; % 这里是位置更新  
41.                if x(i,1) < l_min || x(i,1) > l_max % 判断是否超
出边界
42.                    x(i,1) = l_min + rand(1) * (l_max ‐ l_min);
43.                end   
44.                if x(i,2) < l_min || x(i,2) > l_max  
45.                    x(i,2) = l_min + rand(1) * (l_max ‐ l_min);
46.                end   
47.            else % 采取随机游动  
48.                rand_ind = unidrnd(20); % 随机抽取鲸鱼  
49.                D = abs(C .* x(rand_ind,:) ‐ x(i,:));  
50.                x(i,:) = x(rand_ind,:) ‐ A .* D;  
51.                if x(i,1) < l_min || x(i,1) > l_max % 判断是否超
出边界  
52.                    x(i,1) = l_min + rand(1) * (l_max ‐ l_min);
53.                end   
54.                if x(i,2) < l_min || x(i,2) > l_max  
55.                    x(i,2) = l_min + rand(1) * (l_max ‐ l_min);
56.                end   
57.            end   
58.        else % 采用气泡捕食  
59.            D_1 = abs(X_best ‐ x(i,:));  
60.            l = unifrnd(‐1,1); % 随机数  
61.            x(i,:) = D_1 * exp(b * l) * cos(2 * pi * l) + X_best
;  
62.            if x(i,1) < l_min || x(i,1) > l_max % 判断是否超出边
界  
63.                x(i,1) = l_min + rand(1) * (l_max ‐ l_min);  
64.            end   
65.            if x(i,2) < l_min || x(i,2) > l_max  
66.                x(i,2) = l_min + rand(1) * (l_max ‐ l_min);  
67.            end   
68.        end   
69.        fitt(i) = fit(x(i,:)); % 每更新一次位置,求解一次适应度  
70.    end   
71.    disp(['当前迭代次数为:',num2str(iter)])   
72.    % 迭代完一次更新数据  
73.    fit_best = min(fitt); % 更新当前代数中种群的最优解  
74.    ind = find(fitt == min(fitt),1);  
75.    X_best = x(ind,:); % 更新最优位置  
76.    X_BEST = [X_BEST;X_best]; 
77.    FITT = [FITT;fit_best];  
78.    iter = iter + 1;  
79.end   
80.Fit_Best = min(FITT);  
81.ind_best = find(FITT == min(FITT),1);  
82.X_BE = X_BEST(ind_best,:);  
83.disp(['找到的最优解为:',num2str(Fit_Best)])   
84.disp(['最优解对应的 X:',num2str(X_BE)])   
85.figure(2)   
86.plot(1:MAX_iter,FITT)  
87.title('种群迭代图')   
88.xlabel('迭代次数')   
89.ylabel('适应度值') 

すべての論文については、以下の「QQ 名刺のモデリングのみ」を参照してください。 QQ 名刺をクリックしてください

おすすめ

転載: blog.csdn.net/weixin_43292788/article/details/130968337
おすすめ