JijModeling 1.12.1 リリースノート#
機能強化#
Interpreter エラーの可読性向上#
Interpreter
で評価エラーが発生した場合、より可読性の高いエラーが表示されるようになりました。例:
import jijmodeling as jm
D = jm.Placeholder("D", dtype=jm.DataType.INTEGER)
T = jm.Placeholder("T", dtype=jm.DataType.INTEGER)
N = jm.Placeholder("N", dtype=jm.DataType.INTEGER)
H = jm.Placeholder("H", shape=(D, T, N))
R = jm.Placeholder("R", shape=(D, N))
x = jm.BinaryVar("x", shape=(D, T, N))
d = jm.Element("d", belong_to=(0, D))
t = jm.Element("t", belong_to=(0, T))
i = jm.Element("i", belong_to=(0, N))
problem = jm.Problem(name="shift_optimization")
problem += jm.Constraint("night_shift", R[d+1, i] <= x[d, T-1, i], forall=[d, i])
problem += jm.sum([d, t, i], x[d, t, i])
problem
num_days = 7
num_times = 3
num_people = 5
data = problem.generate_random_dataset(
options={
"D": {"value": num_days},
"T": {"value": num_times},
"N": {"value": num_people},
}
)
interp = jm.Interpreter(data)
try:
interp.eval_problem(problem)
except Exception as e:
print(e)
Traceback (most recent last):
while evaluating Problem `shift_optimization',
defeind at File "/tmp/ipykernel_2160/2988517098.py", line 14, col 11-48
while evaluating constraint: `night_shift',
defeind at File "/tmp/ipykernel_2160/2988517098.py", line 15, col 12-82
while evaluating expression `R[d + 1, i] - x[d, T - 1, i]',
defeind at File "/tmp/ipykernel_2160/2988517098.py", line 15, col 41-66
while evaluating expression `R[d + 1, i]',
defeind at File "/tmp/ipykernel_2160/2988517098.py", line 15, col 41-50
File "/tmp/ipykernel_2160/2988517098.py", line 15, col 41-50:
15 | problem += jm.Constraint("night_shift", R[d+1, i] <= x[d, T-1, i], forall=[d, i])
^^^^^^^^^
IndexError: Index (7,0) is out of range for shape (7,5)
バグ修正#
Interpreter.eval_*
のパフォーマンスバグを修正#
以前は、Interpreter
での式の評価に意図したよりも多くの時間がかかっていました。
これは、OMMX の Function
に対する演算を繰り返し呼び出していたためで、中間形式との相互変換とメモリの再割り当てが行われていた結果、一部の総和演算で二次関数的にパフォーマンス低下が発生していました。
今リリースから、JijModeling は専用の中間形式を使用するようになり、こうした評価時のオーバーヘッドが大幅に抑えられるようになりました。