記事ディレクトリ
コンテストのアイデアが 0 件あります
(コンテストの質問が出たらすぐに CSDN で共有します)
最短生産計画モデル
このモデルはいくつかのコンテストの問題に登場しており、2022 年の全国大会もこのモデルに関連すると予測されています。
1 モデルの説明
離散システムのシミュレーションは、工業生産のプロセス配置において非常に重要な役割を果たしており、複雑な内部機構を伴ういくつかの離散問題に対して、シンプルで簡単かつ監視可能な数学モデルを確立する方法は、常にシミュレーション技術の研究のホットスポットとなっています。
現在、離散イベント システムには 3 つのシミュレーション モデリング戦略があります。
- イベントのスケジュール設定
- アクティビティスキャン
- プロセスの相互作用。
モデルのデモでは、アクティブ スキャン方式を使用して実稼働環境での実際の例を処理します。
アクティビティスキャン方法は、イベント間に強い相関があるシステムに適切に適用できます。
2 つのインスタンス
2.1 問題の説明
多くの工場の生産工程では、設備の数や製品の加工順序に制限があるため、単純に生産作業を手配することができないことがよくあります。私たちは、この調整が、強力な数学的ソフトウェアをシンプルかつ簡単な方法で適用することによって行われることを想定しています。
重機工場の製品がすべて一体であると仮定すると、ある工場には 4 種類の設備があり、6 つの製品の加工作業を引き受けます。各製品が受け付けた手順は、指定された設備で処理されます。プロセスと処理サイクルは次のとおりです表面
ここで、この現実的な問題に従って配置する方法を模索します。
必須:
1. 各製品は所定の工程に従って処理されなければならず、逆に加工してはなりません。
2. 各デバイスは同時に 1 つのタスクのみを実行できます (各製品の各プロセスがタスクです)。
3. 受け入れられたすべてのタスクをできるだけ短い時間で完了します。
電力エネルギーを節約し、生産タスクを合理的に割り当てるために、工場では次のことも必要です。
1. 製品ごとに各工程の開始と完了のスケジュールを作成します。
2. 各デバイスがタスクを実行するスケジュールを指定します。
2.2 数学モデル
2.2.1 モデルプロセス
2.2.2 表記規則
2.2.3 モデルの解決
2.3 関連コード
clear
clc
seq=[3 1 2 3 4 0 0 0 %各产品加工时所用的设备的次序
1 4 2 3 0 0 0 0
3 4 1 2 1 0 0 0
2 3 4 1 4 3 0 0
4 2 3 4 1 3 4 0
1 2 1 3 4 1 3 1];
tim=[8 2 4 24 6 0 0 0 %加工对应使用的时间
4 5 3 4 0 0 0 0
3 7 15 20 8 0 0 0
7 6 21 1 16 3 0 0
10 4 8 4 12 6 1 0
1 4 7 3 5 2 5 8];
whole=[0 0 0 0];
for i=1:6
for j=1:8
if(seq(i,j)~=0)
whole(seq(i,j))=whole(seq(i,j))+tim(i,j);
end
end
end
whole %生产各件产品所需的总时间
mes=cell(4,1); %记录各个设备的工作时间(对应于上面tim的位置)
for k=1:4
mes{
k,1}=zeros(6,8);
for j=1:8
for i=1:6
if(seq(i,j)==k)
mes{
k,1}(i,j)=tim(i,j);
else
mes{
k,1}(i,j)=100;
end
end
end
end
turn=cell(5,100); %记录四个设备的开关时间及加工对象(on(i))
for i=1:4
for j=1:100
turn{
i,j}='off';
end
end
for i=1:100
turn{
5,i}=[num2str(i) '分'];
end
open=zeros(6,8);
%记录6个产品的加工进度,0表示未进行,1表示已开始(或已结束),2表示可选,3表示没有这个程序
for i=1:6
open(i,1)=2;
end
for i=1:6
for j=1:8
if seq(i,j)==0
open(i,j)=3;
end
end
end
gongxu=zeros(6,1);
dai=zeros(4,1);
j=1;
s=[1 1 1 1 1 3 3 3
1 1 1 1 3 3 3 3
1 1 1 1 1 3 3 3
1 1 1 1 1 1 3 3
1 1 1 1 1 1 1 3
1 1 1 1 1 1 1 1];
while isequal(open,s)==0
on=[];
for i=1:4
if turn{
i,j}=='off'
%在turn矩阵中逐列搜索,若设备处于关机状态,则作记录(可用)
on=[on i];
end
end
l1=length(on);
for m=1:l1 %在整个生产计划中(对设备逐个)寻找能够选作操作的步骤
[x,y]=find(open==2);
l2=length(x);
a=[x(1) y(1)];
for k=1:l2 %对某个设备on(m),找出当前它能操作的步骤中耗时最小的一个
if mes{
on(m)}(a(1),a(2))>mes{
on(m)}(x(k),y(k))
a=[x(k) y(k)];
end
end
if turn{
on(m),j}=='off' & mes{
on(m)}(a(1),a(2))~=100
%若时间为100则意味着这个步骤不属于我们希望使用的那件设备
while tim(a(1),a(2))>0
turn{
on(m),tim(a(1),a(2))+j-1}=a(1);
tim(a(1),a(2))=tim(a(1),a(2))-1;
end
end
end
for i=1:4
if turn{
i,j}~='off'
dai(i)=turn{
i,j};
end
end
for i=1:4
if turn{
i,j}~='off' & turn{
i,j+1}=='off'
gongxu(turn{
i,j})=gongxu(turn{
i,j})+1;
open(turn{
i,j},gongxu(turn{
i,j}))=1;
end
if gongxu(dai(i))<8 & open(dai(i),gongxu(dai(i))+1)~=3 & turn{
i,j+1}=='off'
open(dai(i),gongxu(dai(i))+1)=2;
end
end
j=j+1;
end
2.4 モデル解の結果
各製品の各工程の開始・終了スケジュール
各デバイスが実行するタスクのスケジュール
結果から、この方法を使用すると、すべてのプロセスがわずか 78 単位時間で完了できることがわかります。また、論文の冒頭では、この論文だけを完了するには 75 単位の時間がかかることもわかります。この方法により得られた結果は非常に満足のいくものであり、操作が簡単で監視性が高いことがわかります。