✍️
代数的なモデル記述 (expr)
タグ付きテンプレート(expr`30 * ${x} + 50 * ${y} <= 40`)や内積(dot)・総和(sum)により、${...} を型付きの変数参照として直接バインドして定式化。
数式の記述
import { Model, expr, maximize } from "@ohtaman/washi";
// 1. モデルの作成
const m = new Model("木工製品の利益最大化");
// 2. 決定変数の定義(整数変数)
const desks = m.integer("机", { lb: 0 });
const chairs = m.integer("椅子", { lb: 0 });
// 3. 目的関数の設定(机 $30、椅子 $50 の利益最大化)
m.objective(maximize(expr`30 * ${desks} + 50 * ${chairs}`));
// 4. 制約条件の追加(木材と労働力の上限)
m.constraint(expr`${desks} + 2 * ${chairs} <= 40`, "木材上限");
m.constraint(expr`2 * ${desks} + ${chairs} <= 50`, "労働力上限");
// 5. WebAssembly (HiGHS) による求解
await m.solve();
console.log(`生産量: 机=${desks.value}台, 椅子=${chairs.value}台`);
console.log(`最大利益: $${m.objectiveValue}`);