0

私には3つの操作があります。各操作はループ内にありflag、操作の実行中に減少する値があります。flag操作の実行中、値が最大しきい値に達した他の操作は、その操作を中断して代わりに実行する必要があります(優先度が最も高くなります)。値はflag時間に対する微分方程式に従って変化します。

  • 別の操作が実行されているときに各操作の値を増やし、値が最大しきい値に達したflagときにそれに切り替えるようにシステムに通知します。flag
  • 各操作のflag値は、操作の実行中に時間とともに変化する特定の微分方程式に従って増減します。

現在、すべての操作は1つのファイルにあり、Switch caseステートメントでループされています。現在のコードは次のとおりです。

while 1
  [value, index]=max(flag);
  switch index
      case 1
          operation1
          ...
          ...
          flag = [x y z]
      case 2
          operation2
          ...
          ...
          flag = [x y z]
      case 3
          operation3
          ...
          ...
          flag = [x y z]
    end
end

何か案は ?もう少し詳しく説明する必要がある場合は、教えてください。

4

1 に答える 1

0

ここにはいくつかのアプローチがあります

  1. 操作が実行されるたびに、他の操作がいくらか重み付けされ、次に操作が選択されると、重みが最も高い操作が選択されます。
  2. 操作が実行されるミリ秒ごとに、他の操作がいくらか重み付けされ、次に操作が選択されると、重みが最も高い操作が選択されます。
  3. 操作が実行されるミリ秒ごとに、他の操作がいくらか重み付けされます。オペレーションが最高のフラグ ステータスを失うとすぐに、中断する必要があります。

それぞれに異なるソリューションが必要です


対応する問題に対して、いくつかの推奨される解決策を次に示します。

  1. かなり些細なことですが、操作を実行するたびにすべての操作のフラグを 1 増やすか、この操作のフラグを 1 減らします。
  2. 操作を完了するのにかかった時間を測定し (おそらく とticを使用toc)、この値で他のすべての操作のフラグを増やします。
  3. 操作への入力としてフラグを与え、経過時間がこの操作の他のフラグを超えると操作が停止します。調整なしでは、基本的にミリ秒単位で操作を交互に実行しようとすることを意味することに注意してください。
于 2013-02-15T16:14:30.620 に答える