SPSS Modelerのみでマッチング最適化を実行する
組み合わせは40320通り(8 * 7 * 6 * 5 * 4 * 3 * 2 * 1)
この記事では組み合わせ総当たりを紹介します。CLPEXノード(最適化ソルバー)を利用する方法は逆引き9-22を参照ください。
この記事は2023年秋のSPSSユーザーイベントで扱われたModeler詰将棋①を題材にしています
1.想定される利用目的
・想定されるすべての組み合わせから最適解を求める
・想定されるすべての組み合わせから予測モデルによるシミュレーションを実行する
2.サンプルストリームのダウンロード
3.サンプルストリームの説明
a.入力するデータは以下の通りです。男性の座席1(M1)から座席8(M8)までに想定される組み合わせ40320通りがこの時点で作られています。
このテーブルの作成方法は次のとおりです。
スーパーノードの中でシンプルな1から8までの8行1列のデータをM1からM8まで作成します。
レコード結合では重複がないように以下の条件を用います。
c.[フィールド作成]ノードを編集します。逆引き4-1で紹介した連番を振ります。
e.[レコード結合]ノードを編集します。[キー]結合を選択しますが、[キー]はブランクにして40320レコードに8名の女性IDを総当たりさせます。
[テーブル]を表示します。男性のパターンに女性8名の組み合わせテーブルができました。40320 * 8 で322,560とおりの総当たりのパターンが成立しました。
[テーブル]を表示します。女性に対応する男性の編成ができました。
[テーブル]を表示します。このテーブルでPID毎にスコアを集計すれば最適化計算が可能になります。
m.[フィールド作成]ノードを編集します。同一または隣接県に居住する制約フラグを作成しています。
n.[フィールド作成]ノードを編集します。季節の好みが一致すると2点スコアされるようにしています。
o.[フィールド作成]ノードを編集します。季節の好みが正反対の場合にはペナルティとして1点減点されます。
p.[フィールド作成]ノードを編集します。制約条件として年齢差が3歳以内を満たすとフラグを立てます。
q.[フィールド作成]ノードを編集します。年齢差を絶対値で求めています。
r.[レコード集計]ノードを編集します。パターンID毎に集計します。
S.[フィールド作成]ノードを編集します。nとoで求めた季節スコアを調整します。
]
t.[条件抽出]ノードを編集します。制約条件を絞り込みます。
u.[ソート]ノードを編集します。年齢差が最小を優先した上で季節スコアが高いパターンを探します。
[プレビュー]します。最適なパターンが特定されました。セルをハイライトしたままメニューから条件抽出ノードを生成します。
[テーブル]を実行します。
注意事項
男性8名と女性8名でも組み合わせが32万通りになるため、20秒程度の処理時間が必要です。業務で想定されるような人数でマッチングを行うにはCLPEXのような最適化ソルバーが必要になります。逆引き9-22も参照ください。
4.参考情報
通し番号の振り方を紹介した記事
SPSS Modeler ノードリファレンス目次
SPSS Modeler 逆引きストリーム集(データ加工)