2026年6月4日木曜日

COPT IIS機能

IIS機能とは、

 

結論から言うと、IIS = Irreducible Infeasible Subsystem(最小非実行可能部分系) で、

「モデルが実行不可能になる原因となっている最小の制約セット」 を指します。

◆ 一言でまとめると

IIS = “この制約グループが原因で infeasible になっている最小セット” どれか 1 つでも外すと実行可能になる可能性がある、という“最小の矛盾の塊”です。

◆ もう少し丁寧に説明すると

最適化モデル(LP/MIP)が infeasible(実行不可能) になるとき、 原因は通常「複数の制約の組み合わせ」にあります。

しかし、モデル全体を見ても原因は分かりにくい。

そこでソルバーは IIS を抽出 します:

  • IIS は 実行不可能な制約の最小集合

  • IIS 内の制約を 1 つでも外すと、実行可能になる(可能性が高い)

  • モデルのデバッグに非常に有効

◆ 例(イメージ)

コード
x ≥ 10
x ≤ 5

この 2 つだけで infeasible。 これが IIS。

もし制約が 100 個あっても、IIS は 2〜5 個程度の小さなセットになることが多い。

◆ COPT での IIS

COPT には Compute IIS 機能があり、 モデルが infeasible のときに IIS を抽出できます。

<例>

次は、COPTがInfeasibleを検出したときの解析コードです。

この中で、

COPT_ComputeIISで、IISを計算、COPT_WriteIISで、その原因をファイルに書き出しています。API的には、問題となる制約ROWと変数を列挙しています。結果的には、以下のファイルに書き出した内容を得ることが出来ます。

このファイルが言っていることは、制約267でX15変数が1,一方で、X15変数範囲は[0:0]になっていて、これが矛盾である、ということが分かります。商用ソルバであるCOPTは、このように、IIS機能が充実しています。現在は、評価ライセンスでCOPTを使用できので、IIS機能を使って開発デバッグの一助とすることが出来ます。

製品版では、これらをHIGHSに置き換える必要があります。実装は、HIGHSがどの程度IISをサポートするかにも依存します。さらにGUIモデル系に変換することも必要となります。実装には、結構な時間を要すると思います。

<書き出しファイル内容>

\Generated by Cardinal Operations Minimize x15 Subject To r267: x15 = 1 Bounds x15 = 0 END

<APIコード>

if (lpstat== COPT_LPSTATUS_INFEASIBLE){ //assert(0); stringstream stm; stm << "Fatal COPT Infeasible\n" << ends; send_status_to_gui(stm.str()); errcode = COPT_ComputeIIS(prob->get()); if (errcode) { error_handling(errcode); return; } COPT_WriteIIS(prob->get(),"model.iis"); // === 1. 制約(行:ROW)のチェック === int numRows = getNumRows(); int* rowLowerIIS = (int*)malloc(sizeof(int) * numRows); int* rowUpperIIS = (int*)malloc(sizeof(int) * numRows); COPT_GetRowLowerIIS(prob->get(), numRows, NULL, rowLowerIIS); COPT_GetRowUpperIIS(prob->get(), numRows, NULL, rowUpperIIS); stm<<"--- 矛盾の原因となっている制約(ROW) ---\n"; for (int i = 0; i < numRows; i++) { if (rowLowerIIS[i] == 1 || rowUpperIIS[i] == 1) { char rowName[256]; COPT_GetRowName(prob->get(), i, rowName, sizeof(rowName), NULL); stm<< " - 制約名: "<< rowName<< " "<< i; if (rowLowerIIS[i] == 1) stm<< " [下限値が矛盾]"; if (rowUpperIIS[i] == 1) stm<<" [上限値が矛盾]"; stm<<"\n"; } } // === 2. 変数(列:COL)のチェック === int numCols = getNumCols(); int* colLowerIIS = (int*)malloc(sizeof(int) * numCols); int* colUpperIIS = (int*)malloc(sizeof(int) * numCols); // 変数の「下限」と「上限」のIISステータスを取得 COPT_GetColLowerIIS(prob->get(), numCols, NULL, colLowerIIS); COPT_GetColUpperIIS(prob->get(), numCols, NULL, colUpperIIS); stm<<"\n--- 矛盾の原因となっている変数限界(COL) ---\n"; for (int j = 0; j < numCols; j++) { if (colLowerIIS[j] == 1 || colUpperIIS[j] == 1) { char colName[256]; COPT_GetColName(prob->get(), j, colName, sizeof(colName), NULL); stm<<" - 変数名:"<< colName<< " "<< j; if (colLowerIIS[j] == 1) stm<< " [変数の下限(LB)が矛盾]"; if (colUpperIIS[j] == 1) stm<<" [変数の上限(UB)が矛盾]"; stm<<"\n"; } } // メモリ解放 free(rowLowerIIS); free(rowUpperIIS); free(colLowerIIS); free(colUpperIIS); stm << ends; send_status_to_gui(stm.str()); return; }

2026年6月1日月曜日

特許維持年金送付

2026年度分の特許維持年金の送付を行いました。クレーム数が多ければ多い程良いと思いこんでいたのですが、維持費を考えると少ないほうが良いです。

 

1)納付書番号取得(出願ソフト)

2)特許庁に振り込み(1)番号で)

3)納付書を特許庁に送付(出願ソフト)


特許庁に送付する文書の作り方。WORDで記述した。

特許庁に提出する書類(Word作成)は、「電子出願ソフト」で読み込める形式(HTML形式)に変換して提出するのが一般的です。
Wordファイルをそのまま提出することはできないため、特許庁が定める独自のルール(書式設定や記述方法)に従って編集する必要があります。
📄 必須の書式設定(Wordでの基本設定)
特許庁のシステムにエラーなく読み込ませるため、以下の設定を必ず行ってください。
  • 用紙サイズ: A4縦
  • 文字の大きさ: 10.5ポイント〜12ポイント(10.5pt推奨)
  • 余白: 上60mm、下30mm、左25mm、右20mm(目安)
  • フォント: MS明朝、MSゴシックなどの標準フォント
  • 行間: 1行の文字数は「約40文字」、1ページの行数は「約50行」
✍️ 本文の記述ルール
特許庁の書類は、コンピュータが自動処理できるように記述ルールが厳格に決まっています。
  • 【項目名】の使用: 各セクションの頭には必ず【書類名】【提出日】【提出者】などの公式タグ(【 】で囲まれた文言)を記載します。
  • 全角文字の使用: 記号や数字、スペースも含めて、原則としてすべて全角で入力します。
  • 段落番号の付与: 明細書などでは、段落の先頭に【0001】、【0002】のように全角4桁の番号をつけます。
🔄 提出用データへの変換・手順
Wordでの執筆が終わったら、以下の手順で提出データを作成します。
  1. HTML形式で保存: Wordの「名前を付けて保存」から、ファイル種類を「Webページ(フィルタ後)」または「Webページ」を選択して保存します。
  2. 電子出願ソフトに取り込み: 特設の「電子出願ソフト」に作成したHTMLファイルを読み込ませます。
  3. エラーチェック: ソフトの文書チェック機能(形式チェック)を使い、書式エラーが出ないか確認します。
  4. オンライン送信: エラーがゼロになったら、マイナンバーカードや識別番号を使って特許庁へ暗号化送信します。


作成したHTMLファイルを読み込ませます。どうやって。どのメニューで。
インターネット出願ソフトにHTMLファイルを読み込ませるには、画面上部にある「文書入力」ボタンを使用します
具体的な手順とクリックするメニューの位置は以下の通りです。
🛠️ 具体的な操作手順
  1. フォルダーを選択する
    • ソフト左側のメニューから、「出願」(または請求・審査請求など該当する手続き)タブを開きます。
    • ツリー表示の中から、一番上にある「送信ファイル」フォルダーをクリックして選択します
    • ※ここを選択しないと、ボタンが灰色になっていてクリックできません。
  2. メニュー(ボタン)をクリックする
    • 「送信ファイル」フォルダーを選択すると、画面上部のメニューボタンがアクティブ(黒文字)になります。
    • 上部メニューにある 〔文書入力〕 ボタンをクリックします。
  3. HTMLファイルを選択する
    • 「入力文書の指定」というダイアログ画面(ファイル選択ウィンドウ)が表示されます。
    • Wordから保存したHTMLファイル(拡張子が .htm または .html のもの)を探して選択します
    • 右下の 〔指定完了〕 ボタンをクリックします。
  4. 署名を付与して変換する
    • 電子証明書の確認画面が出るので、内容を確認して 〔実行〕 ボタンをクリックします。
    • 自動的に書式チェック(エラーチェック)が走り、問題がなければ「送信ファイル」フォルダー内に出願用データが生成されます。


オンライン送信のやり方
オンライン送信(出願)は、インターネット出願ソフトの画面上部にある「オンライン出願」ボタンを使用します 
事前に「文書入力」を完了し、ステータスが「正常」になっていることを確認した上で、以下の手順で行ってください。
🛠️ オンライン送信の具体的な手順
  1. 送信するファイルを確認する
    • ソフト左側のメニューで「送信ファイル」フォルダーを選択します。
    • 画面右側のリストに、先ほど読み込んだ書類が表示されているか確認します。
    • メッセージ欄の表示が「正常」になっていることを必ず確認してください。(「異常」の表示がある場合は送信できません)
  2. 対象の書類を選択する
    • 送信したい書類をクリックして青く反転させます。
    • ※複数ある場合は、キーボードの Ctrl キーを押しながらクリックすることで同時に選択できます。 
  3. 「オンライン出願」を実行する
    • 画面上部のメニューにある 〔オンライン出願〕 ボタンをクリックします。
    • 「選択された文書をオンライン出願します。よろしいですか?」という確認画面が出るので、〔OK〕 をクリックします。
  4. 電子証明書のパスワードを入力する
    • マイナンバーカード等の電子証明書の読み込み画面(パスワード入力画面)が表示されます。
    • 設定している PINコード(暗号用パスワード)を入力して 〔確定〕 をクリックします。 
  5. 送信完了と「受理書」の確認
    • データの送信が始まります。
    • 送信が正常に完了すると、自動的に画面が切り替わり、特許庁から届いた「受理書」が表示されます。
    • ※送信した書類は「送信ファイル」フォルダーから消え、「受付済」フォルダーに移動します。


表示機能を終了させてください、と出てくるが、やり方不明。
「起動している表示機能を終了させてから再試行してください」というエラーメッセージは、「書類の中身をプレビュー確認する画面(ブラウザや別ウィンドウ)」がまだ開いたままになっていることが原因です。
出願ソフトは、書類の見た目を確認する画面が開いている間、その書類を送信したり新しく取り込んだりする処理がロックされる仕組みになっています。
解決するには、パソコンの画面上で開いているプレビュー画面を閉じる必要があります。以下の手順を試してください。
🛠️ 終了(閉じる)の手順
  1. 出願ソフトの「別ウィンドウ」を探す
    • インターネット出願ソフトとは別に、書類の内容(「【書類名】特許出願」などと書かれた文章)が表示されているウィンドウ(SGMLビューア、またはブラウザ画面)が画面のどこかに開いていませんか?
    • 画面の一番下にあるタスクバーで、出願ソフトのアイコンにマウスを当てて、2つ以上のウィンドウが開いていないか確認してください。 
  2. その画面の「×」ボタンで閉じる
    • 見つかった書類表示ウィンドウの、右上の [×] ボタン、または画面内にある [終了][閉じる] ボタンをクリックして画面を完全に閉じます。
  3. もし見つからない場合は「出願ソフト自体を一度閉じる」
    • どの画面が原因か分からない場合は、一度インターネット出願ソフト自体を [×] で終了させてください。
    • ソフトを閉じて、もう一度起動し直すことで、ロックされていた表示機能が強制的にクリアされます。