整数線形計画問題
horih
組み合わせ最適化
組み合わせ最適化って?
- 決められた条件の中で,最も良い答えを求める
問題例
- 最短経路問題
- ナップサック問題
- 巡回セールスマン問題 などなど
このような問題へのアプローチ
- DPのような効率よく解くアルゴリズムを用いる
- 全部の組み合わせをチェックする←今回取り扱うのはこっち
整数線形計画問題
- 解きたい問題を目的関数と制約式を用いてモデル化する.
- 整数を使うことで現実問題をモデル化できる(こともある)
- 分枝限定法を使って探索する範囲を限定しながら,全てのパターン探索する.
意外と整数線形計画問題を使えるシーンはおおい
- LT会の当番表とかもいろいろ制約付けたら作れるかも
- アルゴリズム考えるの面倒なときとかもいいかも
- スライド作るの面倒なのであとは,デモします
自作PC最適化ツール(コストとおすすめ度合と消費電力で)
- 使った目的関数と制約式
param N_GPU integer, > 0;
param N_CPU integer, > 0;
param N_POW integer, > 0;
param N_MOT integer, > 0;
set V_GPU := 1..N_GPU ;
set V_CPU := 1..N_CPU ;
set V_POW := 1..N_POW ;
set V_MOT := 1..N_MOT ;
param COST_CPU{V_CPU} ;
param COST_GPU{V_GPU} ;
param COST_POW{V_POW} ;
param COST_MOT{V_MOT} ;
param POW_CPU{V_CPU} ;
param POW_GPU{V_GPU} ;
param POW_MOT{V_MOT} ;
param POW{V_POW} ;
param RCD_CPU{V_CPU} ;
param RCD_GPU{V_GPU} ;
param RCD_POW{V_POW} ;
param RCD_MOT{V_MOT} ;
var cpu{V_CPU} binary ;
var gpu{V_GPU} binary ;
var pow{V_POW} binary ;
var mot{V_MOT} binary ;
var satisfy ;
var cost ;
maximize SATISFY : satisfy ;
s.t. CPU_Select:
sum {i in V_CPU} cpu[i] = 1 ;
s.t. GPU_Select:
sum {j in V_GPU} gpu[j] = 1 ;
s.t. POW_Select:
sum {k in V_POW} pow[k] = 1 ;
s.t. MOT_Select:
sum {l in V_MOT} mot[l] = 1 ;
s.t. Power_Limit:
sum {i in V_CPU} POW_CPU[i] * cpu[i]
+ sum {j in V_GPU} POW_GPU[j] * gpu[j]
+ sum {l in V_MOT} POW_MOT[l] * mot[l] <= sum {k in V_POW} POW[k] * pow[k] ;
s.t. Total_Cost:
cost = sum {i in V_CPU} COST_CPU[i] * cpu[i]
+ sum {j in V_GPU} COST_GPU[j] * gpu[j]
+ sum {k in V_POW} COST_POW[k] * pow[k]
+ sum {l in V_MOT} COST_MOT[l] * mot[l] ;
s.t. Limit_Cost:
cost <= 20 ;
s.t. Satisfaction:
satisfy = sum {i in V_CPU} RCD_CPU[i] * cpu[i]
+ sum {j in V_GPU} RCD_GPU[j] * gpu[j]
+ sum {k in V_POW} RCD_POW[k] * pow[k]
+ sum {l in V_MOT} RCD_MOT[l] * mot[l] ;
結果
Problem: modell
Rows: 9
Columns: 11 (9 integer, 9 binary)
Non-zeros: 40
Status: INTEGER OPTIMAL
Objective: SATISFY = 6 (MAXimum)
No. Column name Activity Lower bound Upper bound
------ ------------ ------------- ------------- -------------
1 cpu[1] * 0 0 1
2 cpu[2] * 0 0 1
3 cpu[3] * 1 0 1
4 gpu[1] * 1 0 1
5 gpu[2] * 0 0 1
6 pow[1] * 0 0 1
7 pow[2] * 1 0 1
8 mot[1] * 0 0 1
9 mot[2] * 1 0 1
10 satisfy 6
11 cost 16.2