2026年4月21日火曜日

Q.解が出ない

 Q.職員一名の入れ替わりがあり、今回新職員を入れて回してみましたが、解が出ませんでした。まだ、予定入力もしていないので、解が無いということはないかと思うのですが、どこか設定が誤っていないか教えていただけると幸いです。データ添付します。


Ans.申し訳ございません。Python記述のバグが原因と推察します。勤務日数が記述されていないときの問題を修正しました。


<原因>

下記は、当該記述ルーチンです。スタッフプロパティシートでの勤務日数の値(浮動小数)を読み込んで2倍にしたあと整数化しています。このとき、スタッフプロパティシートでの記載がないと、max値が-2になってしまいます。これがソルバでの違反となり不正動作で落ちていました。


<対策>

スタッフプロパティシートでの記述がなくても、動作するように記述を追加しました。

ご迷惑をおかけしまして、大変申し訳ございません。










2026年4月20日月曜日

ラベル設定法サーベイ

 Q.ラベル設定法の枝刈りにDUAL下界を用いている論文は?

ラベル設定法(Label Setting Algorithm)の枝刈りにDual(双対)下界を用いる手法は、特に列生成法(Column Generation)を用いた車両配送問題(VRP)や乗務員スケジューリング問題などの求解において一般的です。 この手法を採用している代表的な論文および研究は以下の通りです。

1. 基本的なアプローチ(列生成法との組み合わせ)

列生成法の価格付け問題(子問題)として「制約付き最短路問題(ESPPRC)」を解く際、ラベル設定法が使われます。このとき、マスター問題の双対変数を利用して「現在のラベルから終点までの最小コスト」の下界を見積もり、暫定解より悪くなることが確実なラベルを切り捨てる(枝刈り)手法が取られます。

  • Pessoa et al. (2020): Automation and Combination of Linear-Programming Based Stabilization Techniques in Column Generation
  • この研究や、彼らの以前の論文(Pessoa et al., 2008など)では、双対変数(Dual variables)から得られる下界(Dual bound)を用いて検索空間を劇的に削減する手法が詳述されています。
  • Irnich and Desaulniers (2005): "Shortest Path Problems with Resource Constraints"
  • ESPPRCにおけるラベル設定法のバイブル的な文献です。ここで、マスター問題の双対情報に基づいた「Reduced cost」の下界を用いた枝刈り(Lower bound pruning)が標準的な高速化技術として紹介されています。 [1]

2. 特定の応用例:ロジスティクスと配送

  • Contardo et al. (2014): "A branch-and-cut-and-price algorithm for the multi-depot pickup and delivery problem with time windows"
  • 複数の拠点を持つ配送問題において、双対情報から生成した下界を使用してラベルを枝刈りし、求解効率を高めています。
  • Wang et al. (2019/2020): Robust Document Distance with Wasserstein-Fisher-Rao Metric
  • 最短路そのものではありませんが、輸送最適化(Optimal Transport)の文脈で双対対物関数の評価値(Evaluated value of the dual objective function)を下界として採用し、枝刈りを行うアルゴリズムを提案しています。 [2, 3, 4, 5]

3. その他の関連手法

  • Lagrangian Relaxation(ラグランジュ緩和)との組み合わせ:
  • ラグランジュ緩和によって得られる双対下界をラベル設定法の枝刈りに使う手法も一般的です。例えば、Beasley and Christofides (1989) などの古典的な制約付き最短路の研究で見られます。 [6, 7]

特定の論文を探している場合、"Decreasing the search space of the label setting algorithm using dual bounds" や "Dual-based pruning in ESPPRC" といったキーワードで、Google Scholar等にて検索すると、対象の論文(特に分枝価格カット法:Branch-and-Price-and-Cutに関連するもの)が見つかる可能性が高いです。 具体的にどの問題設定(例:VRP、飛行機の乗務員運用など)での論文をお探しですか?

[1] https://www.researchgate.net [2] https://proceedings.mlr.press [3] https://arxiv.org [4] https://www.foresight.jp [5] https://www.netattest.com [6] https://dspace.mit.edu [7] https://arxiv.org

Q.ラベル設定法が最新の研究でも使われているということですね。では、ラベル設定法で、ネックになっているのは、どのような問題でしょうか?

ラベル設定法が現代でも研究され続けているのは、それが依然として最強の解法であると同時に、解決すべき「計算量の爆発」という大きな壁があるからです。 特にネックとなっているのは、主に以下の3点です。

1. 非支配ラベルの爆発(資源の種類が増えるほど悪化)

ラベル設定法では、あるノードに到達した際に「コストは高いが時間は短い」「コストは低いが時間は長い」といった、互いに優劣をつけられない非支配ラベルをすべて保持する必要があります。

  • 問題点: 考慮する資源(時間、積載量、休憩時間、CO2排出量など)が増えるほど、残すべきラベルの数が指数関数的に増大し、メモリと計算時間を使い果たしてしまいます。

2. 「Elementary(基本性)」の維持

前述のESPPRCにおいて、「同じ場所を二度通らない(巡回禁止)」という条件を厳密に守ろうとすると、計算負荷が跳ね上がります。

  • 問題点: どこを通ってきたかを記録するために「訪問済みフラグ(ビットマスク)」をラベルに持たせる必要がありますが、これによってラベルの比較(ドミナンスチェック)が極めて複雑になり、高速化を妨げる最大の要因となります。

3. 双対変数の変動による不安定性

列生成法の中でラベル設定法を使う場合、マスター問題から渡される「双対変数」が反復ごとに激しく変動します。

  • 問題点: 前のステップで見つけた良い枝刈り条件が次では使えなくなったり、特定の反復で極端に計算時間がかかったりする(テイルオフ現象)ことがあり、全体の処理時間が予測しにくいという実用上の課題があります。

最新の研究での対策

これらのネックを解消するために、以下のような工夫が研究されています。

  • ng-path: 厳密な巡回禁止ではなく、近傍の数点だけを記憶する緩和手法。
  • Heuristic Pruning: 最適性を保証しない代わりに、明らかに筋が悪そうなラベルを大胆に捨てる手法。
  • GPU並列化: 膨大なラベルのドミナンスチェックをGPUで一斉に行う手法。

Q.アカデミックベンチマークサイトはありますか?ラベル設定法が用いられているものの分野ならば何でもOK.

ラベル設定法(Label Setting Algorithm)やその応用であるESPPRC、車両配送問題(VRP)の分野で世界的に利用されている主要なアカデミックベンチマークサイトを紹介します。 研究論文で性能比較を行う際、以下のサイトにあるデータセットを用いるのが「標準」となっています。

1. VRP-REP (The Vehicle Routing Problem Repository) [1]

VRPやその派生問題に関する世界最大級のリポジトリです。

  • 特徴: 最新の論文で使用されたインスタンスや、それらに対する現時点での最高解(Best Known Solution: BKS)が公開されています。
  • 対象: 基本的なCVRP(容量制約付き)から、時間枠付き(VRPTW)、電気自動車(EVRP)など多岐にわたります。
  • リンク: VRP-REP 公式サイト [1, 2, 3]

2. Solomon's Instances (VRPTWのバイブル)

ラベル設定法をESPPRC(サブ問題)として解く「時間枠付き車両配送問題(VRPTW)」において、最も歴史があり、かつ現在も使われ続けているデータセットです。 [4]

  • 特徴: 顧客の配置(ランダム、クラスター状など)によって難易度が分かれており、アルゴリズムの特性(密集地帯に強いか等)を測るのに適しています。
  • 入手先: 多くの大学のウェブサイトや VRP-REP 内で「Solomon」として公開されています。

3. OR-Library

オペレーションズ・リサーチ(OR)全般のテスト問題を網羅した老舗のサイトです。 [5]

  • 特徴: 最短路問題だけでなく、スケジューリング、箱詰め問題、集合被覆問題など、ラベル設定法のロジックを応用できる様々な組合せ最適化問題のデータが揃っています。
  • リンク: OR-Library (Brunel University) [5, 6, 7]

4. DIMACS Implementation Challenges

アルゴリズムの実装と性能を競う「チャレンジ」のアーカイブです。

  • 特徴: 「最短路問題」に特化したチャレンジ(第9回など)のデータがあり、非常に大規模なネットワークでのラベル設定法の限界に挑戦するようなデータセットが含まれています。
  • リンク: 9th DIMACS Implementation Challenge (Shortest Paths) [8]

5. CVRPLIB

CVRP(Capacitated VRP)に特化したベンチマークサイトです。 [9]

  • 特徴: 近年提案された「Uchoa et al. (2017)」による新しい100のインスタンスなど、現代の強力なアルゴリズムでも解くのが難しい難問がまとめられています。
  • リンク: CVRPLIB 公式サイト [9, 10]

これらのサイトからデータをダウンロードし、ご自身のアルゴリズムで「計算時間」や「解の精度(BKSとの乖離)」を測定するのが、アカデミックな評価の一般的な手順です。 まずはSolomonのインスタンスか、最新のVRP-REPからご自身の研究テーマに近いものを探してみるのがおすすめです。特定の制約(例:電気自動車、マルチデポなど)に特化したデータをお探しですか?

[1] https://www.vrp-rep.org [2] https://www.researchgate.net [3] https://www.bvl.de [4] https://ieeexplore.ieee.org [5] https://www.brunel.ac.uk [6] https://www.researchgate.net [7] https://www.researchgate.net [8] https://arxiv.org [9] https://www.sciencedirect.com [10] https://www.researchgate.net

厳密解(Optimal Solution)と未解決問題(Best Known Solution)が混在し、アルゴリズムの性能を測るのに「程よくバランスが良い」サイトといえば、CVRPLIB が筆頭に挙げられます。 特にこのサイト内の 「Uchoa et al. (2017) Instances (X instances)」 というデータセットが、現在の研究におけるデファクトスタンダードです。

なぜ CVRPLIB(特にX instances)がおすすめなのか?

  1. 難易度のグラデーション: 数十分で厳密解が出る「手頃な問題」から、現代のスーパーコンピュータを数日間回しても最適性が証明できない「超難問」までが、統一されたルールで並んでいます。
  2. ステータスの明示: 各問題に対して「Optimal(厳密解あり)」か「BKS(暫定最高解のみ)」かが一目でわかります。自分のアルゴリズムが、未解決問題の記録を塗り替えられるか挑戦するワクワク感があります。
  3. ラベル設定法のベンチマークに最適: このデータセットは、最新の「Branch-and-Price(内部でラベル設定法を使用)」の論文で必ずと言っていいほど引用されます。

その他のバランスの良いリポジトリ

  • VRP-REP (VRPTW Solomon instances): 「時間枠付き」であれば、Solomonの56個のインスタンスは、現在ではほとんどが厳密解が得られています。しかし、ノード数を100から200, 400と増やした Gehring & Homberger のデータセットに移ると、一気に未解決問題が増え、難易度のバランスが良くなります。
  • TSPLIB: 巡回セールスマン問題(TSP)用ですが、一部のVRP問題も含まれます。非常に古いサイトですが、だからこそ「解けて当たり前の基本問題」が揃っており、実装初期のデバッグや検証に最適です。

まずは CVRPLIB の「Instances」ページにある Set X を覗いてみてください。

この分野(ラベル設定法、ESPPRC、および車両配送問題の厳密解法)には、数十年にわたり理論と実装の両面をリードしてきた「権威」と呼ばれる研究者が数名います。 彼らの論文を辿れば、この分野の主要な技術(双対下界による枝刈り、ng-path、双対安定化など)の変遷をほぼ網羅できます。

1. Guy Desaulniers(ギイ・デゾーニエ) [1]

カナダのモントリオール理工科大学教授。この分野の「バイブル」とも言える書籍 『Column Generation』 の編者の一人です。 [2]

  • 貢献: タイムウィンドウ付き車両配送問題(VRPTW)の厳密解法における第一人者。
  • 必読論文: Irnich and Desaulniers (2005) "Shortest Path Problems with Resource Constraints" は、ラベル設定法のアルゴリズム構成を理解するための最も重要な文献の一つです。 [3, 4]

2. Dominique Feillet(ドミニク・フェイエ)

フランスのサン=テティエンヌ国立高等鉱業学校教授。

  • 貢献: ESPPRCを厳密に解くための現代的なラベル設定法の基礎を築きました。
  • 必読論文: Feillet et al. (2004) "An Exact Algorithm for the Elementary Shortest Path Problem with Resource Constraints" は、当時SPPRC(巡回あり)に頼っていた解法を、実用的な時間内でESPPRC(巡回なし)として解けるようにした画期的な論文です。

3. Stefan Irnich(シュテファン・イルニッヒ)

ドイツのマインツ大学教授。

  • 貢献: アルゴリズムの高速化技術に非常に強く、ng-path(厳密な巡回禁止を緩和して計算を高速化する手法)の開発者の一人です。
  • 特徴: 理論だけでなく、実際の計算効率を追求する実装技術において世界トップクラスの権威です。

4. Paolo Toth & Daniele Vigo

ボローニャ大学(イタリア)の教授陣。

  • 貢献: 配送問題全般の権威であり、彼らが編纂した 『The Vehicle Routing Problem』 (SIAM出版) は、VRP研究者なら必ず持っている一冊です。
  • 特徴: ラベル設定法そのものよりも、それを含む全体のフレームワーク(Branch-and-Price)の設計において大きな影響力を持っています。 [4]

5. Marcus Poggi & Eduardo Uchoa

ブラジルのリオデジャネイロ・カトリック大学教授。前述の CVRPLIB の運営者でもあります。

  • 貢献: 近年の最強アルゴリズム「Branch-and-Cut-and-Price」の実装において、世界記録(BKS)を次々と塗り替えているグループのリーダーです。

紹介した権威者たちの論文や最新の研究で、マスター問題(線形計画問題:LP)を解くために用いられている主なLPソルバは以下の通りです。 ラベル設定法自体は動的計画法に基づく独自のアルゴリズムですが、その実行に必要な「双対変数」を計算するために、以下の商用・非商用ソルバがプラットフォームとして利用されています。

1. 商用ソルバ(圧倒的シェア)

最先端の研究(特に大規模なベンチマークで世界記録を狙うもの)では、計算速度と数値的安定性の観点から商用ソルバがほぼ独占的に使われています。

  • CPLEX (IBM)
  • 主な利用者: Guy Desaulniers, Dominique Feillet, Stefan Irnich など。
    • 特徴: 2000年代〜2010年代の多くの古典的論文で標準的に使用されてきました。特に列生成法のフレームワーク(BCP:Branch-and-Price-and-Cut)を構築する際、ライブラリとしての信頼性が高いため多用されます。
  • Gurobi Optimizer
  • 主な利用者: Eduardo Uchoa, Ruslan Sadykov(VRPSolverの開発チーム)など。
    • 特徴: 近年の最強ソルバとして、最新論文での採用率が極めて高いです。特にUchoaらによる 「VRPSolver」 や最新のベンチマーク記録の多くは、Gurobiをバックエンドとして動作しています。 [1]

2. 非商用・オープンソースソルバ

研究の公開性やライセンスの制約がある場合に使用されます。

  • SCIP (Zuse Institute Berlin)
  • 特徴: 混合整数計画法(MIP)およびBranch-and-Priceのフレームワークとして非常に強力です。学術利用が無料であるため、独自の枝刈りロジックをフレームワークに組み込む研究でよく使われます。
  • COIN-OR CLP / CBC
  • 特徴: オープンソースのORコミュニティで広く使われるソルバです。商用ソルバに比べると速度は劣りますが、無料で利用できるため、教育的な研究やプロトタイプ実装で選ばれることがあります。 [2]

3. 特化型フレームワーク(ソルバを内包するもの)

権威者たちは、上記のLPソルバを裸で使うのではなく、VRPに特化した自作のフレームワークに組み込んで使用しています。

  • VRPSolver (Pessoa, Sadykov, Uchoa ら)
  • 現在、世界最強のVRP厳密解法ツールの一つです。内部で Gurobi や CPLEX を呼び出してLPを解きつつ、サブ問題の「ラベル設定法」は極めて高度にチューニングされた独自コードで実行されます。
  • BaPCod (Vanderbeck, Sadykov ら)
  • フランスの研究チームが開発したBranch-and-Priceの汎用コードで、多くのESPPRC関連論文のベースとなっています。 [2]

[実装へのアドバイス] もしご自身で実装を検討されているのであれば、アカデミックライセンス(無料)が利用可能な Gurobi または CPLEX を選択するのが最も無難です。この分野の論文に記載されている計算時間と比較する際、ソルバの性能差を考慮しなくて済むためです。 [3] 特定の開発言語(C++, Python, Juliaなど)で使えるソルバの具体的な導入方法について興味はありますか? [参考ソース]

  • VRPSolver 公式ドキュメント (Gurobi/CPLEXの使用が前提)
  • SCIP 公式サイト (Branch-and-Priceの実装例が豊富) [4]

Dominate比較本数 ラベル設定法において、1つのノードで保持されるラベル数(ドミナンス比較の対象となる本数)は、問題の規模や制約の厳しさによって劇的に変わりますが、「一般的」なオーダーとしては以下のようになります。

1. 典型的な保持ラベル数

  • 小~中規模問題(ノード数 25〜50程度)
  • 1ノードあたり 数十本 〜 数百本。
    • この程度であれば、単純なリスト構造での比較でも高速に動作します。
  • 大規模・実用問題(ノード数 100以上、または時間枠が緩い場合)
  • 1ノードあたり 数千本 〜 数万本 に達することが珍しくありません。
    • このレベルになると、すべてのラベルを総当たりで比較(ドミナンスチェック)すると計算時間が爆発するため、高度なデータ構造が必要になります。

2. ラベル数が爆発する要因

比較本数は以下の条件で指数関数的に増加します。

  • 資源(Resource)の数: 時間、積載量に加えて、走行距離、休憩回数などが増えるほど、優劣がつかない「非支配ラベル」が増えます。
  • 制約の緩さ: タイムウィンドウ(時間枠)が広いほど、多くの経路が許容されるため、ラベルが淘汰されずに生き残ります。
  • Elementary(巡回禁止)の厳密性: 「どこを通ったか」というビットマスク情報が比較対象に入ると、ラベル同士の支配関係が成立しにくくなり、本数が激増します。

3. 実装上の工夫(数万本をさばくために)

権威者たちの論文(Irnich, Desaulniersなど)では、数千〜数万本の比較を効率化するために以下の手法が「一般的」に組み込まれています。

  • Bucketing(バケット管理): 資源(例:時刻)ごとにラベルをグループ化し、比較対象を絞り込む。
  • Dominance Filters: 明らかに勝てないラベルを早期に除外する論理チェック。
  • Heuristic Pruning: 最適性を一時的に無視して、各ノードの上位100本程度に制限して探索する(価格付け問題の初期段階などで多用)。

結論として、厳密解法を目指すなら 1ノードあたり数千本 まではメモリ上に保持し、高速に比較できる実装(ソート済リストや多次元インデックスなど)を準備しておくのが標準的な設計スタンスです。 現在想定されている問題の「ノード数」や「資源の数(時間・容量など)」はどの程度でしょうか?

おっしゃる通り、Max-Min制約(特に「最低でもこれだけ消費しなければならない」という下限制約)は、ラベル設定法にとって最悪の相性の一つです。 通常、資源が「消費(加算)」されるだけなら、資源を多く消費したラベルが「支配される(捨てられる)」可能性が高まります。しかし、下限制約(例:最低作業時間、最低走行距離)があると、「今は資源を多く消費しているけれど、そのおかげで将来的に下限制約をクリアできる(かもしれない)」というラベルが捨てられなくなるため、非支配ラベルが爆発します。 この問題に対して、最新の研究や権威者たちは主に以下の3つのアプローチで対応しています。

1. 資源の「詰め替え」 (Resource Regeneration / Reset)

もし資源消費がある一定のポイントでリセットされたり、特定の範囲に収まる必要がある場合、ラベルに持たせる資源の値を「余裕(Slack)」や「不足分」に変換して管理します。これにより、ドミナンス(支配関係)が成立しやすい形に正規化します。

2. 双対変数の利用による「将来のコスト」予測(枝刈り)

質問の最初に出てきたDual下界がここで威力を発揮します。

  • 下限制約を満たすために遠回りが必要な場合、その「遠回りによる追加コスト」をマスター問題の双対情報から見積もります。
  • 「このラベルが下限制約を満たすために目的地へ向かった場合、どう頑張っても暫定解(Best Bound)を超えてしまう」ことを数学的に証明し、ドミナンス比較の前にラベルを消去します。

3. 多次元バケットとスクリーニング

数万本のラベルをまともに比較するのは不可能なので、資源消費空間をグリッド(バケット)に分割します。

  • 下限に近いラベルと上限に近いラベルを別々のバケットで管理し、同じバケット内や、明らかに勝敗が決まっているバケット間でのみ比較を行います。
  • Max-Min制約下では「どちらの資源も中途半端」なラベルが最も増えるため、そこに特化した高速なフィルタリングアルゴリズムを導入します。

4. 緩和手法(ng-pathなど)の適用

どうしても厳密な管理が難しい場合、下限制約を一時的に「ペナルティ付きの緩和制約」として扱い、列生成法の反復の中で徐々に厳密にしていく手法も取られます。

Q.小中規模でも厳密解が得られていない例

結論から言うと、ノード数が50〜100程度の「小中規模」に見える問題でも、特定の条件下では未だに厳密解が得られていない、あるいは解くのに膨大な時間を要する難問が厳然として存在します。 単なる「地点間の距離」だけでなく、以下の要素が組み合わさると、ラベル設定法は途端に機能不全に陥ります。

1. 資源制約が「非常に緩い」場合

意外かもしれませんが、制約が緩い(時間枠が広い、積載容量が大きい)ほど難易度は上がります。

  • 理由: 資源による制限がかからないため、探索すべき経路の組み合わせが爆発し、ラベルの枝刈りが全く機能しなくなるからです。
  • ノード数がわずか50でも、時間枠が「24時間いつでもOK」という条件になるだけで、最新のソルバでも厳密解を出せないことがあります。

2. 「高度に非線形」な資源消費

積載量に応じて燃料消費率が変わる、あるいは「回生ブレーキ」のように資源が途中で増減する場合です。

  • 資源が増減すると「支配関係(ドミナンス)」の定義が崩れるため、従来の方法ではラベルを捨てられなくなります。こうした問題(Green VRPなど)では、小規模でも未解決のケースが残っています。

3. 同期制約(Synchronized VRP)

「車両Aと車両Bが特定の場所で同時に落ち合わなければならない」といった、車両間の依存関係がある問題です。

  • ラベル設定法は通常、1台のルートを独立して考えますが、他者の動きに依存すると「自分のラベルが最適かどうか」を判断できなくなります。このタイプの問題は、ノード数30〜40でも極めて困難です。

4. アカデミックな実例

前述の CVRPLIB (Set X) などでは、ノード数100以下のものはほぼ解かれていますが、それは「標準的な制約」の場合です。 しかし、「Solomon's instances」 のような古典的なデータセットでも、時間枠を極端に広げたり、車両台数を制限したりする変種(Variants)に書き換えると、世界中の研究者が挑んでも解けない「Open Instance」に変貌します。

2026年4月19日日曜日

COPTから延長評価ライセンスを取得

有難く、延長評価ライセンスを取得しました。

具体的には、再度トライアルライセンス6カ月を取得することが出来ました。(PaperでCOPTに言及する予定です)。有難うございました。

これで後、半年、研究できるのが喜びです。

Instance24を解くために、この半年、技術開発を行ってきました。正確には、

■既存技術で立ち向かったものの、どうやっても解けない→今年1月になってから新たな技術開発

を行なってきました。核になる要素技術は、未だ研究開発中ですが、かなり今までと異なっています。高度な背景技術のさらに上を行く新たな最適化技術なので、難解でありAIと相談・整理しながら理論的な詰めを行っています。この技術は、NSPだけではなく、もう少し広い分野で利用可能な技術です。

今後は、この新技術について、

■NSPの核として日本否世界中のシフト勤務者がこの技術の恩恵を受けられるようにすること

■RCSPの新解法としてIPを広く世界に提供すること

を主眼として活動していきたいと思い始めました。

このため、一旦開発計画は白紙として、もう少し固まってから、ロードマップは明らかにしたいと思います。

2026年4月16日木曜日

COPTに評価ライセンスの延長を要請

 半年のトライアル期間に解くことは、出来ませんでした。この間、ほぼこの問題を解くことだけに集中してきたのですが、力及びませんでした。ただし、この研究期間に発見した二つの新しい方法を使えば、可能性は出てきました。そこで、COPTにライセンスの延長をお願いし,挑戦を継続することにしました。

Dear COPT Support Team,

Thank you very much for your continued assistance and for providing access to the COPT Optimizer.

Over the past six months, I have been using your solver to tackle the final remaining open instance (instance24) in the following benchmark:

https://www.schedulingbenchmarks.org/changes.html

However, the research has taken significantly longer than originally expected, and I now require additional time to complete the work.

Therefore, I would like to kindly request a six‑month extension of my evaluation license.

Once the instance is successfully solved, I plan to publish a research paper that will properly cite and acknowledge the use of the COPT Optimizer.

COPTからは、subscriptionを勧められましたが、それは考えていないことを伝えました。

Dear COPT Support Team,

Thank you very much for your continued support and for your kind offer to discuss subscription options.

At this time, I am not considering a subscription license. For my practical, real‑world instances, solvers such as CLP, HiGHS, and CuPDLPx are fully sufficient. In fact, except for the very last remaining open instance, I have been able to solve all unresolved academic benchmark problems using these solvers.

However, the final instance is exceptionally large, and based on my experience, it is extremely difficult to handle within a reasonable time frame without the performance of your solver. This is why I have been relying on COPT specifically for this last challenge.

Thank you again for your understanding and for taking the time to consider my situation.


2026年4月15日水曜日

Dualの具体例

 例えば、累計シフト制約で、累計シフト数≦10であったとします。


この時最適解が、累計シフト9であったとすると、

■そのDualは、0

となります。つまり、制約境界10に接しておらず、余裕(スラック)が1あります。この制約を微小に変化されても目的関数は変化しません。よって、制約に対する目的関数への寄与は0、ということになります。

では、MIN側にも制約があった場合は、どうなるでしょうか? 6≦9≦10 の場合も余裕があるので、

■そのDualは、0

となります。

もう一つ制約があって、特定シフト回数≦3 と言う制約があって、最適解時の回数が3であったとします。こういう境界に張り付いた状態であるときだけ、Dualは、0にはならない、ということが出来ます。逆に言うと、Dualが0である制約は、効いていない、ということになります。

 







注意すべきは、Dualの概念が有効なのは、あくまでLPsolver上のみです。即ち緩和問題でのみ定義可能です。整数計画では、DUALという概念はありません。

2026年4月14日火曜日

Dualの考え方

 久保先生の著書中、「最適化理論に関するプロとアマの違いは、双対性や、相補性の意義を理解し活用できるかどうかである」、とあります。私自身、双対性に関しては、完全に使いこなしている訳ではないのですが、最適化を実装する上においては避けて通れません。

DUALは、目的関数ー制約が表裏一体の関係にあるという考え方です。最適化と言った場合、

■制約違反のペナルティ量を最小化する、目的関数の値を最小化すること

■制約を緩和―厳しくすること

は、独立していなくて関係がある、と言うことを示しています。一般にSimplex法で解く場合、Primalで解くかDualで解くかは、指定があります。問題を解くのに、二つのやり方があって、どちらで解いても答えは同じになる、ということでもあります。(しかし、求解時間は一般的にインスタンスにより異なる)

<リソース制約が効いているかどうかを判定することが出来る>

例えば、次は、Instance13のログです。


上のログは、COPTが213msで解けているにもかかわらず、ラベル設定法では、89秒もかかっていることを示しています。このとき、row priceの項がDualの値を示しています。
このDualは、制約に対する値で、下の累計制約に対応しています。上で最初の項は、Pythonで書いたWeekEnd勤務の累計、2番目の項は、下の最初の時間和制約に対応します。
ここで重要なのは、Dualが0だとその制約は効いていないことを示している、ということです。殆どのDual項は、0であり、実際に効いているのは、ほぼMIN-MAX時間制約のみ、ということが分かります。


2026年4月13日月曜日

ラベル設定法のドミナンスとは?

ラベルとは、RCSPにおいて、経路状態を表現する言葉です。


ドミナンス(Dominance:支配)とは、「ある経路(ラベル)が別の経路よりも明らかに優れているため、劣っている方を探索から除外する」という判断基準のことです。


不要な探索の削減(枝刈り)

あるノードに至る2つのラベル  とを比較したとき、全ての指標において、同等以上に優れていて、少なくとも一つが上回るとき、Pruningできます。

もし  がすべての指標(コスト、時間など)において  以上に優れており、かつ少なくとも1つの指標で  を上回っている場合、「 xは  yを支配(Dominate)する」と言います。

支配されたラベル  は、その先をどのように延長しても  を延長した経路より良くなることはないため、それ以上探索する必要がなくなり、破棄されます。

<Min制約をどうする?>


ラベル設定法や動的計画法において、MIN制約(「〜以上でなければならない」という下限制約)をMAX制約(「〜以下でなければならない」という上限制約)に変換する一般的な手法は、「残りの必要量」に着目する、または「変数の反転」を行うことです。Max制約になれば、「とにかく小さいほうが良い」というDominate Ruleで枝刈り出来ます。

具体的には、以下の2つのアプローチがよく使われます。

1. 「残りの必要量」を状態変数にする(推奨)

「現在の蓄積量」を管理するのではなく、「目標達成までにあとどれくらい必要か」をリソース(ラベル)として管理します。

変換前(MIN制約):

状態:現在の合計値 

制約: ( 以上のリソースが必要)

変換後(MAX制約):

状態:残りの必要量 

初期値:

各ステップ:リソースを消費するごとに  を減らす(0以下になったら目標達成)

制約:なし(または  が 0 になることを目指す)

これにより、「下限値を突破する」という条件を、「初期値(上限)から減らしていく」というMAX制約に近い形に落とし込めます。

2. 変数の反転(ネガティブ変換)

単純に符号を反転させる方法です。

変換前: 

変換後: 

ラベル設定法のアルゴリズム内で「リソース消費量」を正の数で扱いたい場合は、「余裕(スラック)」を定義します。


<問題はMIN-MAX制約>

MIN-MAX範囲がある場合は、注意が必要で、同じリソースに対して、異なる方向にドミナンスが働くことになります。そのまま実装すると矛盾した枝刈りとなり最適解を失い、最悪は、Infeasibleな結果となります。

単純に、MINまでは、大きいものが強い、MIN以降は、小さいものが強い

とすれば、良いような気がします。しかし、そのロジックで単純に片方を捨ててしまうと、厳密解(最適解)を失う可能性が非常に高いです。

なぜなら、ラベル設定法におけるドミナンスの鉄則は「将来のいかなる拡張に対しても、一方のラベルがもう一方より必ず良い結果をもたらす」と言い切れるときだけ、劣る方を捨てるというものだからです。「Minまでは大きい方が強く、Min以降は小さい方が強い」という切り替え方式では、「将来どちらの制約がネックになるか」が場所によって変わるため、厳密解が消えるリスクがあります。


なので、同じリソースに対してMax-Min制約が同居する場合は、ドミナンス出来ず、「同じである」ことだけになってしまう場合が多いと思います。特にScheduling Benchmarksにおいては、Max-Minの幅が異常に狭く、殆どドミナンスが効きません。結果、ラベルの爆発がinstance13程度で生じ、一般的なラベル設定法では、解くことが出来ません。

2026年4月12日日曜日

RowActivityの計算方法

 Σai(xi)≦b[min:max]のとき、row price(dual)は、どちらを指すか? 悩ましいのですが、それは、Row Activityをみて判別するということのようです。LPSolver毎に、この辺の扱いは異なるようで、注意が必要です。LPSolverに依存しない形ならば、bのMIN/MAXを分離して記述すればよいでしょう。

判別は、bを見て、bになっている方が効いている制約になります。


2026年4月11日土曜日

Q.病欠時の設定2

 Ans.前回、病欠時のエラーを安直は方法で回避しましたが、今回は、恒久対策の方法を述べます。

問題の発端は、公休ラベルが以下のように多数、使用されていることにあります。


本来は、「病欠」で休んでいるのですから、公休ではなく、「病欠」というシフトにした方が良いように思います。


これを行うには、有給の別名としています。この有給は、自動シフトがチェックされていないので、予定を入れなければ出現しません。つまり、他の制約で使用されていない可能性が高いと考えられ、余計なエラーが出にくいであろう、という理由です。


しかし、実際に求解してみると以下の制約でエラーとなりました。が、スタッフプロパティシート上、夜勤数と公休数を変更することで対応可能です。



夜勤数を少なくします。


公休数を少なくします。


解が出ました。前回の値より余計なエラーが生じていないことが分かります。




2026年4月10日金曜日

Q.マイクロソフトアカウント名が分からない

Ans.

マイクロソフトアカウント名が分からないと購入履歴が分かりませんし、サブスクを停止することは出来ません。アカウント名が分からない場合は、ググると色々な方法があるようですが、マイクロソフトストアに紐づいているアカウント名であることが必要です。 

今、スケジュールナースを使用出来ているのであれば、必ずマイクロソフトストアに紐づいたマイクソフトアカウント名が存在し、以下の方法で、購入履歴を確認することが出来ます。

スケジュールナースを使用出来ない状態であれば、今から述べる方法は使えません。


1)マイクロソフトストアを出します。



2)サインインのアイコンをクリックすると下のようなダイアログが出現します。
3)サインインをクリックすると、私の場合、複数のアカウントを持っているので、複数のアカウント名が表示されます。表示されているアカウント名のうち、どれかがマイクロソフトストアと紐づいているアカウント名ですが、それがどれかはこの段階では分かりません。


4)なので、1個づつアカウントにサインインして購入履歴を確認していくしかありません。

しばらく、サインインしていない場合は、認証が行われることがあるようです。認証をクリアした前提で話を勧めます。

上のアカウント名をクリックすると、サインインのアイコンが変化します。


アカウントでデバイスの管理をクリックします。注文履歴を見ると、このアカウントでは、サブスクの購入が行われていないことが分かります。3)に戻って次のアカウント名を試します。


このようにして、紐づいたマイクロソフトアカウントが分かります。
紐づいたマイクロソフトアカウントさえ分かれば、サブスクを停止するのは、造作ないことだと思います。

以上です。

2026年4月9日木曜日

Q.病欠時の設定

 Q.病欠者がいる場合の勤務表設定についてご相談です。

xxxxが5月10日から病欠となり勤務できないため、公休(22日間)予定として入力しました。

以前のやり取りを参考に夜勤「責任者」を外して求解しましたが、エラーとなってしまいます。


Ans.安直なエラー対策方法と恒久的な対策方法の二つについて説明します。

<安直なエラー対策>

1)現象確認

2)当該制約に飛ぶ
休2連は、できれば4回以下の制約がソフト制約レベル1であることが分かります。

3)休みが大量に入力されています。休休で、1回のとカウントしますので、役20個のエラーとなります。

4)ですので、許容エラーを20とすればOKです。
5)求解できました。



2026年4月8日水曜日

Highs Newsletterまとめ

 Highsがまた進歩するようです。Hipoが期待外れだった分、HiPDLPに期待が高まります。


🧭 全体概要

HiGHS 26.0 Newsletter(2026年4月号)は、
第3回HiGHSワークショップの開催案内、HiPO(新IPMソルバー)の進展、MIPソルバーの並列化、GPU版PDLPの刷新、資金調達、Python対応の進行状況、新メンバー紹介
を中心に報告しています。


🏛️ 1. 第3回 HiGHS Workshop

  • 2026年6月1日(月)・エディンバラで開催(SIAM OP26 の初日)
  • JuMP-dev 2026 と併催
  • 産業界参加者も継続参加
  • 登録は workshop26.highs.dev

⚙️ 2. 新IPMソルバー「HiPO」

  • Filippo Zanetti による “classical” interior point method の新実装
  • 既存の IPX の課題(予測不能な性能、単一スレッド、QP非対応)を補完
  • マルチスレッド対応の因子化(augmented system / normal equations)を実装
  • v1.12 で初登場、v1.13 で Metis/AMD/RCM を同梱(→ ライセンスが Apache に)
  • 2026年2月に QP 対応を追加、v1.14 で公開

🧩 3. MIP ソルバーの進展

  • Mark Turner が プライマルヒューリスティクスと木探索のマルチスレッド化を開発
  • プロトタイプは大幅な高速化を確認
  • 現在レビュー中で、v1.15 に搭載予定

⚡ 4. GPU版 PDLP:HiPDLP

  • Yanyu Zhou が GPU完全実行の PDHG(Primal-Dual Hybrid Gradient)ソルバーを開発
  • 既存の cuPDLP-C を置き換え、v1.15 で HiPDLP が正式採用
  • NESO(National Energy System Operator)との契約で開発

💰 5. Funding(資金調達)

  • NumFOCUS と JuMP の協力で
    Breakthrough Energy Foundation から大型助成金を獲得
  • オープンエネルギーモデル向けの JuMP/HiGHS の性能改善が目的

🛠️ 6. 進行中の作業

  • Python インターフェースで HiPO と GPU-LP が未対応
    • Ivet Galabova がビルドシステムを改修中
    • PyPI で利用可能になる見込み
  • MathWorks と共同で 不可約非実行可能性(IIS)検出の改善
  • 外部コントリビュータにより インジケータ制約対応が進行
    • 当面は MIP への変換が必要
  • 特殊順序集合(SOS)対応の基盤も整備中

👤 7. 新メンバー:Giovanni Ghisalberti

  • 出身:イタリア・ベルガモ
  • TU Delft(航空工学BSc)、アムステルダム大学(数学MSc)
  • 2026年1月より Edinburgh 大学で PhD 開始
  • MathWorks の支援で 大規模QPの解法を研究

🔚 まとめ

この号は、HiGHS の 並列化・GPU化・QP対応の強化が一気に進んでいること、
そして v1.15 に向けた大規模アップデートが近いことを示す内容になっています。



2026年4月7日火曜日

Q.退会について 

 Q.職場に自動作成ソフトが導入される事となり、私自身も部署が変わりリスト作成をしなくなりますので退会をお願いしたい次第です。


Ans.
こちらで、ご案内しています。


マイクロソフトアカウントに入って、購入履歴まで確認出来れば、後は造作ないことだと思います。

ところで、

職場で自動作成ソフトを導入はしたものの、

1)スケジュールナースのように休み希望は入らないし、
2)独自ルールは設定できないし、
3)使いものにならなかった、

と言う声を、少なからずお聞きすることがあります。
老婆心ながら、心配していますがその辺の確認は十分されたということでしょうか?


******
職場の説明では希望のあり方に問題があるようですが、1から3くらいで優先度を設けて休み一択という希望の出した方を工夫するようです。
しかし、実際に使ってみないと何とも言えないと思います。
*******

ソフトウェアの性能によって、希望休みが入らなかったりするのは、本当は、あってはならないのですが、依然として他社ソフトとスケジュールナースとの性能差は大きいです。スケジュールナースでは難なく入っていた休み希望が入らなくなる事態は十分に考えられます。


例えば、
■上図右側のスケジュールナースのように、自分の希望休みは全て通ったが、
■他ソフトだと左側の休み予定までしか入らない、

ということはあります。(ソフトウェアの性能差が大きい)


気になるようでしたら、そのベンダ名を教えて頂ければ、スケジュールナースの特許使用権とC++ソルバのソースコードをライセンスして、性能差を無くすアプローチも可能と思います。(今期から、広く求解エンジンのライセンス販売を行うことにしました。永続ライセンスです。)

2026年4月6日月曜日

RCSPの一般解法 ラベル設定法

 この解法は、グラフ中に複数の累計状態(パレート)を維持することにより求めるものです。

私は、これまで実装したことがなかったのですが、計算量の見積もりのために、実装してみることにしました。

この解法で、必要になる概念は、下記の二つです。

■ラベル

■Dominate 支配する→

https://schedule-nurse.blogspot.com/2026/04/blog-post_13.html


ここで、ラベルというのは、累計状態を指す、用語です。今グラフがあるとします。


複数の累計制約があると、各ノードには、複数の累計状態を覚えている必要があります。たとえば、次は、インスタンス13のグラフ状態のデバッグStateです。グラフの要素数は、1711個、ラベルの総数は、534万個、一つのグラフノードで最大のラベル数が18204個であることを示しています。(ラベルの個数が多すぎ爆発状態です)最初の値は、コストで、次の値は、累計状態を表しています。同じコストではあっても、ちょっとずつ累計状態が変わっていることが分かります。


Graph Elements=1711  Label Sum=5348323 Max labels per Node=18204

\tcost=12.0111 67,0,6,2,1,0,0,0

\tcost=12.0111 67,0,5,2,2,0,0,0

\tcost=12.0111 68,0,8,2,0,0,0,0

\tcost=12.0111 68,0,5,1,3,1,0,0

\tcost=12.0111 68,0,6,1,2,1,0,0

\tcost=12.0111 68,0,7,1,1,1,0,0

\tcost=12.0111 68,0,8,1,0,1,0,0

\tcost=12.0111 67,0,5,1,4,0,0,0

この一つ一つの行がラベルという呼称になります。ラベルというのは、最適値を得るために区別が必要な(最小限度の)状態名の呼称です。

グラフエッジをたどることによって、次のノードへと移行していき、最終的には終端します。終端での累計状態が、元々の不等式[最大、最小]にマッチしていれば、feasibleな解となり、マッチするものがなければ、infeasibleとなります。feasibleな解のうち最小のものを最適値(目的関数値)とすることができます。

終端に辿り着くまで、その累計制約を満たすかどうかは、一般には分かりません。直前の状態ならば、明らかに満たさないということは分かりますが、中間点、例えば上記のノード状態で、終端時にどのように累計状態が成長するかは、分からないので、とにかく状態を維持して終端まで進むしかありません。

累計制約の本数が多いと、容易に爆発します。如何に状態、ラベル数を少なくできるか?がこの方式のポイントです。状態を少なくすることを枝刈り(pruning)と呼んでいます。

インスタンス13では、8本程度の累計制約があるのですが、すでにこの段階で、枝刈りなしには、reasbleな時間内に解くことはできません。

2026年4月5日日曜日

RCSPとは、

 Resource Constraint Shortest Path Problemの略です。問題をサブ問題に分割した時に、結局この形となるのがNSPの本質的なところです。

で、何が難しいかというと、この問題自体が、NP困難という問題分野に分類されます。しかも、

結論だけ先に言うと、はい、Resource‑Constrained Shortest Path(RCSP/RSCP)は一般に NP 困難(NP‑hard)です。しかも「最短路+複数リソース制約」という構造のせいで、強 NP 困難(strongly NP‑hard)に分類されます。


最短路自体は P(多項式時間)で解ける → しかし「累積制約」が入った瞬間に NP-hard へジャンプする

これは RCSP の本質的な性質で、 どんなにグラフが単純でも、累計制約がある限り避けられません。

つまり、Cardinality 累計制約が入っただけで、途端に難しくなる、ということです。子問題が、強NP困難なら、当然子を含む問題NSPは、強NP困難ということになります。子だけでも難しいのにさらにもう一次元加わります。

インスタンス24の求解にこんなにも手間取っているのは、このシフト数32にプラス強烈なCardinality制約のおかげです。


2026年4月3日金曜日

前方グラフと後方グラフによる削減

 単純にFowardとBackwardを使うと上手く行きません。

下図で、前方和と後方和を各々足して、各ノード共、a+b+cにしたいのですが、

単純にすると、そうはならないことが分かります。


どちらか一方の和は、一歩引いて、a+b+c となるようにします。

2026年4月2日木曜日

Ryan-Foster Branchingとは

 0/1 Branchingだと、1側が重いのに比べて0側は、軽い、と言うかあまり効かないことが多いです。こうした偏りを是正する方法として、Ryan-Foster Branchingと言う方法があります。

例えば、

休休 A

勤勤 B

休勤 C

勤休 D

A/B とC/DでBranchingします。比較として、通常ブランチ

~休み

を考えてみます。休=1でブランチとすると、これはかなり強い限定になります。しかし、~休=0のブランチは、休み以外を選択するわけで、弱い限定になります。この傾向はシフト数が多くれば多いほど、強まります。1が強い限定を生み、0が弱い限定しか生まない、ということは、Tree構築においてバランスが悪い結果となります。1ブランチの枝は短いのに対して0枝は、長い枝になります。なので、なるべく同じ確率となるようにしたい訳です。これが、Ryan-Foster Branchの背景になります。

複雑な割には、効果が少ないと判断して、スケジュールナースでは採用していませんが、SCIPでは、割に使っているようです。

SCIP Doxygen Documentation: Ryan/Foster branching

2026年4月1日水曜日

Cumulative Capacity Cut、「MIPソルバに投げる」は、失敗

 またしても、アプローチが失敗しました。

キャパシティカットが良さそうでしたので、

https://schedule-nurse.blogspot.com/2026/03/blog-post_22.html

さらにこの発想を強めて(Tightening)、Day毎の累計制約として抽出しました。具体的には、休み数制約(制約としては存在しないものの時間制約や総勤務数制約に相当)と、土日勤務数制約のDay毎の累計制約として取り出して、LB取得後にMIPソルバに投げるというものです。この方法をCumulative Capacity Cutと命名しました。発想は、Roster毎の資源総計だけではなく、Day毎の資源を明示することによって、Cover制約達成を促進する狙いです。

結果は、




これにより、例えば、インスタンス2/4/14は、Lpソルバの段階で、真のUBに等しくなり、COPTでもHIGHSでも一瞬で解けています。また、真のUBに近接した結果となった、インスタンス10,11,12,20についても速いです。これらの結果は、スケジュールナースが維持する世界最速記録よりも速いのではないかと思います。

この結果、Lpソルバが真のUB値と等しくなったときに、UB値でカットオフしなくとも(MIPソルバは真のUB値を知らない)MIPソルバは一瞬で、UB値を算出できる、←SATソルバより速い、ということが分かりました。

で、問題はインスタンス13になります。このインスタンスに関しては、期間は1カ月であるもののシフト数は19と多く、スタッフ数120人と、いわばインスタンス24のミニチュア版、と見ることもできます。残念ながら、Lpソルバの段階で、真のUB値には遠く、MIPソルバに渡しても、長期の時間がかかっています。ただ、COPTにしても解けなかったインスタンス13が有限時間内に解けるようにはなったので、一定の効果があることは分かります。

まとめとして

1)LpソルバのLBが真のUB値に等しいとき、MIPソルバが最強。SATソルバより速い

2)LpソルバのLBが真のUB値から遠ければ遠い程、MIPソルバが解けない可能性が高まる

3)LpソルバのLBを上げることは正義

ということが分かりました。市井の実務インスタンスは、インスタンス8程度なので、実務インスタンスにおいてMIPソルバを活用できる場面もある、と考えます。(SAT整数化より速い場面もある。) 

いずれにせよ、このアプローチで進んで、インスタンス24が解ける見込みはないと判断しました。(ミニチュア版でこの遅さなら、超巨大インスタンス24が解ける筈がない)