私は、ジョブショップの問題に類似したものをモデル化しようとしています。ジョブを実行するためにさまざまな数のタスクを使用する、複数の方法で実行できる複数のジョブがあります。MiniZincに値がないオプションのパラメータ
私はその情報を表現するために、このデータ構造を設定している:
enum Job;
enum Option;
int: maxTasks;
set of int: TaskIndex = 1..maxTasks;
enum Task;
array[Job, Option, TaskIndex] of opt Task: jobOptions;
jobOptions[j, o, index]
が存在する場合、それは仕事j
のオプションo
のindex
番目のタスクです。それがない場合、そのジョブのそのオプションは最大数のタスクを使用せず、これは空のスロットの1つです。
この配列をどのように初期化することができないのですか。それは2D配列だった場合、私はそれが3Dであるので、
jobOptions = array3d(Job, Option, TaskIndex, [
% Job 1
T1, T2, % Option 1
T3, <>, % Option 2
% Job 2
T2, T4, % Option 1
<>, <>, % No second option
|];
のような何かをしたい
jobOptions = [|
T1, T2 |
T3, <>
|];
を行うことができます配列を取るarray3d 3つのバージョンが存在するので、しかし、これは、失敗しました,var int
およびvar opt int.
<>
はvar opt int
であるため、(par) opt int
とすると4番目のバージョンが必要です。
私は当初、「非正方形」の配列を作るために
array[Job] of array[int] of array[int]: jobOptions
ような何かをしようとしましたが、実現可能な場合、私は正しい構文を把握することができなかったということならば。
オプションの要素がない3Dパラメータ配列を初期化する方法はありますか?あるいは、このデータを提示するより良い方法はありますか?