@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/shift-route-optimization-excel-decision/#article>
    schema:about <https://comcomponent.com/knowledge/mathematical-optimization/>, <https://comcomponent.com/knowledge/shift-scheduling-problem/>, <https://comcomponent.com/knowledge/vehicle-routing-problem/> ;
    schema:mentions <https://comcomponent.com/knowledge/mixed-integer-programming/>, <https://comcomponent.com/knowledge/soft-constraint/>, <https://comcomponent.com/knowledge/google-or-tools/>, <https://comcomponent.com/knowledge/cp-sat-solver/>, <https://comcomponent.com/knowledge/highs-solver/>, <https://comcomponent.com/knowledge/excel-solver/>, <https://comcomponent.com/knowledge/excel/> .

<https://comcomponent.com/knowledge/mathematical-optimization/> a skos:Concept ;
    skos:prefLabel "数理最適化"@ja ;
    skos:definition "決める値(決定変数)、守る条件(制約)、良し悪しの物差し(目的関数)を式で表し、条件を満たす解のなかから物差しで最良または十分に良い解を求める方法。"@ja ;
    skos:altLabel "Mathematical Optimization" ;
    skos:altLabel "最適化問題"@ja ;
    skos:altLabel "組み合わせ最適化"@ja .

<https://comcomponent.com/knowledge/shift-scheduling-problem/> a skos:Concept ;
    skos:prefLabel "勤務スケジューリング問題"@ja ;
    skos:definition "複数の勤務帯がある職場で、各日の各勤務に必要な人数を割り当てる問題。1日1勤務までなどの制約と、希望や公平さを考慮して勤務表を作る。"@ja ;
    skos:altLabel "Employee Scheduling" ;
    skos:altLabel "ナース・スケジューリング"@ja ;
    skos:altLabel "シフト作成問題"@ja ;
    skos:altLabel "勤務表作成"@ja .

<https://comcomponent.com/knowledge/vehicle-routing-problem/> a skos:Concept ;
    skos:prefLabel "配送計画問題(VRP)"@ja ;
    skos:definition "複数の車両で複数の地点を回る最適なルートを求める問題。1台で回る巡回セールスマン問題とほぼ同じ問題で、積載量などの制約を加えられる。"@ja ;
    skos:altLabel "Vehicle Routing Problem" ;
    skos:altLabel "VRP" ;
    skos:altLabel "運搬経路問題"@ja .

<https://comcomponent.com/knowledge/mixed-integer-programming/> a skos:Concept ;
    skos:prefLabel "混合整数計画(MIP)"@ja ;
    skos:definition "線形の最適化問題のうち、変数の一部を整数に限るもの。0か1の決定は真偽の変数で表す。"@ja ;
    skos:altLabel "Mixed-Integer Programming" ;
    skos:altLabel "MIP" ;
    skos:altLabel "整数計画"@ja .

<https://comcomponent.com/knowledge/soft-constraint/> a skos:Concept ;
    skos:prefLabel "ソフト制約"@ja ;
    skos:definition "必ず守るハード制約と区別して、できれば守る条件。外れた分を罰則として目的関数に加え、ほかの条件との兼ね合いで扱う。"@ja ;
    skos:altLabel "Soft Constraint" ;
    skos:altLabel "できれば守る条件"@ja .

<https://comcomponent.com/knowledge/cp-sat-solver/> a skos:Concept ;
    skos:prefLabel "CP-SAT"@ja ;
    skos:definition "OR-Toolsに含まれるオープンソースの制約プログラミングのソルバー。OR-Toolsの勤務スケジューリングの例はこのソルバーで解く。"@ja ;
    skos:altLabel "CP-SATソルバー"@ja ;
    skos:altLabel "CP-SAT Solver" .

<https://comcomponent.com/knowledge/google-or-tools/> a skos:Concept ;
    skos:prefLabel "OR-Tools"@ja ;
    skos:definition "Googleが公開しているオープンソースの最適化ソフトウェア。ルート探索のライブラリ、CP-SATソルバー、線形計画・混合整数計画のソルバーへのインターフェースを含み、C++・Python・C#・Javaから使える。"@ja ;
    skos:altLabel "Google OR-Tools" .

<https://comcomponent.com/knowledge/highs-solver/> a skos:Concept ;
    skos:prefLabel "HiGHS"@ja ;
    skos:definition "線形計画・混合整数計画・2次計画を解くオープンソースのソルバー。MITライセンスで公開され、C++のほかC・C#・Julia・Pythonなどから使える。"@ja ;
    skos:altLabel "HiGHS solver" ;
    ks:implements <https://comcomponent.com/knowledge/mixed-integer-programming/> .

<https://comcomponent.com/knowledge/excel-solver/> a skos:Concept ;
    skos:prefLabel "Excelソルバー"@ja ;
    skos:definition "目的セルの値を最大・最小にするよう変数セルを変え、制約を守らせるExcelのアドイン。変数セルは200個まで使え、整数や0か1の制約も指定できる。Excel for the webでは使えない。"@ja ;
    skos:altLabel "ソルバーアドイン"@ja ;
    skos:altLabel "Excel Solver" ;
    ks:implements <https://comcomponent.com/knowledge/mathematical-optimization/> ;
    ks:requires <https://comcomponent.com/knowledge/excel/> .

<https://comcomponent.com/knowledge/excel/> a skos:Concept ;
    skos:prefLabel "Excel"@ja ;
    skos:definition "ワークシートの読み書きや自動操作の対象になる、Microsoftの表計算ソフトウェア。CSVファイルを開くと値を数値・日付として解釈する。"@ja ;
    skos:altLabel "Microsoft Excel" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mathematical-optimization/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shift-scheduling-problem/> ;
    schema:description "人数・日数が多く組み合わせを手で比べきれず、条件を書き出せてデータがそろう場合に、本記事は勤務表の作成に数理最適化を使うことを勧める。規模が小さい、条件を書き出せない、データがそろわない場合は、手作業のままか準備が先とする。"@ja ;
    ks:evidence <https://developers.google.com/optimization/scheduling/employee_scheduling>, <https://developers.google.com/optimization/introduction> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mathematical-optimization/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/vehicle-routing-problem/> ;
    schema:description "配送先が多く回る順番の組み合わせを手で比べきれず、条件を書き出せてデータがそろう場合に、本記事は配送ルートの作成に数理最適化を使うことを勧める。巡回セールスマン問題は一般の場合に効率よく解く方法が知られていないので、ソルバーは時間の上限内で良い案を探す。"@ja ;
    ks:evidence <https://developers.google.com/optimization/routing/vrp>, <https://www.math.uwaterloo.ca/tsp/problem/index.html>, <https://developers.google.com/optimization/routing/routing_options> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shift-scheduling-problem/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/mixed-integer-programming/> ;
    schema:description "誰がどの日のどの勤務に入るかを0か1の変数で表すと、勤務表の作成を変数の一部を整数に限る最適化問題として書ける。"@ja ;
    ks:evidence <https://developers.google.com/optimization/mip>, <https://developers.google.com/optimization/scheduling/employee_scheduling> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shift-scheduling-problem/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/soft-constraint/> ;
    schema:description "OR-Toolsのシフト作成のサンプルは、連続する休みの日数などに必ず守る上限・下限と、できれば守る範囲を分け、できれば守る範囲を外れた分を罰則として目的関数に加える。希望も重み付きで扱う。"@ja ;
    ks:evidence <https://github.com/google/or-tools/blob/stable/examples/python/shift_scheduling_sat.py> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cp-sat-solver/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shift-scheduling-problem/> ;
    schema:description "OR-Toolsの勤務スケジューリングの例はCP-SATソルバーで勤務表を求める。本記事は、標準のExcelソルバーの上限を超える規模の勤務表にOR-Toolsを使う選択肢として挙げる。"@ja ;
    ks:evidence <https://developers.google.com/optimization/scheduling/employee_scheduling>, <https://developers.google.com/optimization> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/google-or-tools/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/vehicle-routing-problem/> ;
    schema:description "OR-Toolsはルート探索のライブラリで配送計画問題を解ける。探索の時間の上限を設定でき、時間を延ばせば案を改善できることを示す探索の状態もある。"@ja ;
    ks:evidence <https://developers.google.com/optimization/routing/vrp>, <https://developers.google.com/optimization/routing/routing_options> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/highs-solver/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/mixed-integer-programming/> ;
    schema:description "HiGHSは混合整数計画のモデルを解くオープンソースのソルバーで、MITライセンスで公開されている。"@ja ;
    ks:evidence <https://highs.dev/> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-solver/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/mathematical-optimization/> ;
    schema:description "Excelソルバーは目的セルの値を最大・最小にするよう変数セルを変え、制約を守らせる。整数や0か1の制約も指定できる。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/define-and-solve-a-problem-by-using-solver-5d1a388f-079d-43ac-a7eb-f63e45925040> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-solver/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/excel/> ;
    schema:description "ExcelソルバーはExcelのアドインとして動く。Excel for the webではアドインが使えないので、ソルバーも使えない。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/define-and-solve-a-problem-by-using-solver-5d1a388f-079d-43ac-a7eb-f63e45925040> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/excel-solver/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shift-scheduling-problem/> ;
    schema:description "標準のExcelソルバーの変数セルは200個まで。5人・30日・3種類の勤務を0か1の変数で表すと450個になるような規模の勤務表には向かない。小さな問題を試すのには使える。"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/office/define-and-solve-a-problem-by-using-solver-5d1a388f-079d-43ac-a7eb-f63e45925040>, <https://www.solver.com/standard-excel-solver-dealing-problem-size-limits> ;
    ks:verifiedAt "2026-11-01" ;
    ks:certainty "context-dependent" .
