2026年6月8日月曜日

相補性

ORの教科書では、DUALの値xスラック変数=0 という説明がされています。

スケジュールナース実装では、列制約(Cover Constraints)にUnder/Over用と二つのスラックを用いています。これは、SchedulingBenchmarksでは、Underの重みが100、Overの重みが1という異なる重みになっているからです。(GUIでもそのオプションがあることが分かると思います。) つまり、一つの制約で、二つの方向をコントロールしている訳です。このようにしている理由は少しでもLpSolverの負担を減らす目的です。

で、教科書にはない、1制約について二つのスラックがあるとき、理論的にどういう挙動になるのかを解析してみます。


相補性定理により、最適解においては、RowPrice化、スラック変数のどちらかが0になるのはわかるのですが、スラック変数が二つあり、Under重み100、Overが重み1で入っていた場合はどうなりますか?数式で説明して。

問題の定式化

例えば「目標値 b からのずれ」を Under/Over で表す典型的な形を

ax+uo=b,u0,  o0

とします。 目的関数側で

min  100u+1o+(他の項)

という「Underに重み100、Overに重み1」を入れているとします。

これを標準形 LP

min  czs.t. Az=b,  z0

とみなすと、変数ベクトル z の中に u,o が含まれ、 その係数は

cu=100,co=1

です。また制約行列 A において、この行(対象の1本の制約)に対する列は

  • u の列:その行で係数 +1

  • o の列:その行で係数 1

となります。

双対問題と RowPrice(双対変数)

この制約に対応する双対変数を π(RowPrice)とします。 標準形 min の双対は

max  bπs.t. Aπc

なので、列ごとに

  • u に対する双対制約:

π100
  • o に対する双対制約:

π1        π1

したがって、RowPrice π

1π100

という区間に縛られます。

相補性条件(補完性条件)

相補性定理(補完的スラックネス)は

(変数)×(対応する双対制約のスラック)=0

という形になります。 ここで双対制約のスラックは

  • u に対して:100π0

  • o に対して:1+π0

なので、相補性条件は

u(100π)=0,o(1+π)=0.

これが「スラック変数と RowPrice のどちらかが 0 になる」という話の、2スラック版の正確な数式です。

どちらのスラックが 0 になるか

上の 2 つの式から、最適解では次のいずれかのパターンになります。

  1. 両方ゼロのケース

u=0,  o=0

このときは

100π>0,1+π>0

すなわち

1<π<100

となります。 → 目標値からのずれがなく、Under/Overとも使われていない状態。

  1. Underだけ正のケース

u>0100π=0π=100,o=01+π>0

つまり

π=100,o=0,u0.

→ Under側のスラックだけが正になりうる状況。

  1. Overだけ正のケース

o>01+π=0π=1,u=0100π>0

つまり

π=1,u=0,o0.

→ Over側のスラックだけが正になりうる状況。

  1. 両方正は不可能

u>0,  o>0

だとすると

100π=0,  1+π=0π=100,  π=1

となり矛盾。 → 相補性により「UnderとOverが同時に正」にはなりえない。

まとめ(直感)

  • 双対変数(RowPrice)π1π100 の範囲にあり、

  • 相補性条件

u(100π)=0,o(1+π)=0

により、

  • 1<π<100 なら u=o=0

  • π=100 なら u0,o=0

  • π=1 なら u=0,o0

  • したがって、最適解では Under と Over のどちらか一方だけが正になるか、両方ゼロであり、両方同時に正にはならない。

重み 100 と 1 の非対称性は、「RowPrice がどちら側の端点(100 か -1)に張り付くか」を通じて、「どちらのスラックが正になりうるか」を決めている、と見るとスッキリします。


Instance13での解析

下記は、instance13でのLB=1348時の様子です。rowpriceが0でない制約のみ列挙しています。上で予測されている通り、

■rowpriceがfractionalなら、minスラック(under)、maxスラック(over)ともに、0

■rowpriceが、-1ならば、overslack>=0

■rowpriceが、100ならば、underslack>=0

ここで、注意するのは、row_priceが0でないのは、全体の2割程度(119 out of 504)ということです。つまり、残り8割の制約については、row_priceが0なので、「効いていない」という特殊状況にあることが分かります。

          row[14]=-0.863305 day = 0 min val=2.55555e-12 max val=5.68424e-10 row[29]=-0.586112 day = 1 min val=2.71906e-12 max val=8.88973e-11 row[41]=-0.524564 day = 2 min val=2.85273e-12 max val=8.00538e-11 row[51]=-1 day = 2 min val=2.75741e-12 max val=0.0418587 row[59]=-1 day = 3 min val=2.76917e-12 max val=0.567414 row[65]=-1 day = 3 min val=2.76857e-12 max val=0.00902082 row[68]=-0.611479 day = 3 min val=2.70788e-12 max val=1.21897e-10 row[83]=-1 day = 4 min val=2.71771e-12 max val=0.00914605 row[86]=-0.816363 day = 4 min val=2.78994e-12 max val=3.59446e-10 row[90]=52.8873 day = 5 min val=4.51134e-12 max val=2.43741e-12 row[91]=52.8873 day = 5 min val=4.4417e-12 max val=2.53334e-12 row[92]=52.8873 day = 5 min val=4.50119e-12 max val=2.43681e-12 row[93]=52.8873 day = 5 min val=4.58953e-12 max val=2.38614e-12 row[94]=100 day = 5 min val=0.0826304 max val=1.60878e-12 row[95]=52.8873 day = 5 min val=4.45319e-12 max val=2.49542e-12 row[96]=52.8873 day = 5 min val=4.54492e-12 max val=2.36447e-12 row[97]=52.8873 day = 5 min val=4.60479e-12 max val=2.29994e-12 row[98]=52.8873 day = 5 min val=4.46162e-12 max val=2.50844e-12 row[99]=100 day = 5 min val=0.0244645 max val=1.68974e-12 row[100]=100 day = 5 min val=0.0276946 max val=1.48983e-12 row[101]=100 day = 5 min val=0.0197265 max val=1.63945e-12 row[102]=100 day = 5 min val=0.0241363 max val=1.60311e-12 row[103]=100 day = 5 min val=0.0352569 max val=1.68851e-12 row[104]=100 day = 5 min val=0.0548525 max val=1.65172e-12 row[105]=100 day = 5 min val=0.02621 max val=1.5467e-12 row[106]=100 day = 5 min val=0.385148 max val=1.29568e-12 row[107]=100 day = 5 min val=0.741131 max val=1.0914e-12 row[108]=47.1127 day = 6 min val=4.3592e-12 max val=2.38182e-12 row[109]=47.1127 day = 6 min val=4.18156e-12 max val=2.64174e-12 row[110]=47.1127 day = 6 min val=4.21321e-12 max val=2.59127e-12 row[111]=47.1127 day = 6 min val=4.22595e-12 max val=2.64134e-12 row[112]=47.1127 day = 6 min val=4.18462e-12 max val=2.74338e-12 row[113]=47.1127 day = 6 min val=4.2615e-12 max val=2.52519e-12 row[114]=47.1127 day = 6 min val=4.22859e-12 max val=2.59199e-12 row[115]=47.1127 day = 6 min val=4.18693e-12 max val=2.64157e-12 row[116]=46.2326 day = 6 min val=4.03356e-12 max val=2.87082e-12 row[117]=47.1127 day = 6 min val=3.96615e-12 max val=2.96322e-12 row[134]=-0.837218 day = 7 min val=2.58397e-12 max val=2.61113e-10 row[163]=-0.925784 day = 9 min val=2.59777e-12 max val=6.6424e-10 row[180]=-0.602286 day = 10 min val=2.70604e-12 max val=1.09113e-10 row[181]=-0.625962 day = 10 min val=2.91071e-12 max val=1.10779e-10 row[210]=-0.768445 day = 11 min val=2.79359e-12 max val=1.71992e-10 row[220]=100 day = 12 min val=0.025898 max val=1.74228e-12 row[225]=100 day = 12 min val=0.0205166 max val=1.80212e-12 row[226]=100 day = 12 min val=0.0184117 max val=1.74637e-12 row[227]=100 day = 12 min val=0.0179949 max val=1.70341e-12 row[228]=98.4456 day = 12 min val=6.02561e-11 max val=1.62807e-12 row[229]=100 day = 12 min val=0.0176241 max val=1.73514e-12 row[230]=100 day = 12 min val=0.0322697 max val=1.73808e-12 row[231]=100 day = 12 min val=0.0373443 max val=1.50067e-12 row[232]=100 day = 12 min val=1.18009 max val=1.41862e-12 row[233]=100 day = 12 min val=0.0403635 max val=1.57967e-12 row[234]=100 day = 13 min val=0.222295 max val=1.49075e-12 row[235]=100 day = 13 min val=0.124916 max val=1.45064e-12 row[236]=100 day = 13 min val=0.0436695 max val=1.47376e-12 row[237]=100 day = 13 min val=0.387442 max val=1.45202e-12 row[238]=100 day = 13 min val=0.152822 max val=1.66829e-12 row[239]=100 day = 13 min val=0.032794 max val=1.53126e-12 row[240]=100 day = 13 min val=0.0482729 max val=1.56177e-12 row[241]=100 day = 13 min val=0.0203498 max val=1.61615e-12 row[242]=100 day = 13 min val=0.0594985 max val=1.66069e-12 row[243]=100 day = 13 min val=0.914335 max val=1.24705e-12 row[260]=-0.685022 day = 14 min val=2.63634e-12 max val=1.35774e-10 row[265]=-1 day = 14 min val=2.60472e-12 max val=1.01838 row[283]=-1 day = 15 min val=2.87888e-12 max val=0.0561331 row[291]=-0.669252 day = 16 min val=2.72094e-12 max val=1.43556e-10 row[301]=-1 day = 16 min val=2.86499e-12 max val=0.0183823 row[309]=-0.70548 day = 17 min val=2.6219e-12 max val=1.69257e-10 row[313]=-0.883984 day = 17 min val=2.68177e-12 max val=4.08302e-10 row[319]=-1 day = 17 min val=2.5107e-12 max val=1 row[346]=98 day = 19 min val=4.59079e-11 max val=1.62041e-12 row[351]=100 day = 19 min val=0.646963 max val=1.37153e-12 row[352]=99.2295 day = 19 min val=1.0678e-10 max val=1.58572e-12 row[353]=100 day = 19 min val=0.0163243 max val=1.5739e-12 row[354]=100 day = 19 min val=0.0378528 max val=1.65346e-12 row[355]=100 day = 19 min val=0.10811 max val=1.51971e-12 row[356]=99.5536 day = 19 min val=2.40253e-10 max val=1.50882e-12 row[357]=100 day = 19 min val=0.0521357 max val=1.39095e-12 row[358]=100 day = 19 min val=0.651391 max val=1.25515e-12 row[359]=100 day = 19 min val=2.99785 max val=7.42342e-13 row[360]=100 day = 20 min val=0.025462 max val=1.56327e-12 row[361]=100 day = 20 min val=0.0124321 max val=1.75039e-12 row[362]=100 day = 20 min val=0.0323657 max val=1.63865e-12 row[363]=100 day = 20 min val=0.0133692 max val=1.73585e-12 row[364]=100 day = 20 min val=0.0191744 max val=1.79394e-12 row[365]=100 day = 20 min val=0.0307338 max val=1.73287e-12 row[366]=100 day = 20 min val=0.0295816 max val=1.66538e-12 row[367]=100 day = 20 min val=0.0157267 max val=1.74435e-12 row[368]=100 day = 20 min val=0.0348275 max val=1.64747e-12 row[369]=98.4726 day = 20 min val=5.25977e-11 max val=1.88827e-12 row[370]=-1 day = 20 min val=2.64508e-12 max val=0.145464 row[386]=-0.609231 day = 21 min val=2.73781e-12 max val=1.14469e-10 row[410]=-0.840048 day = 22 min val=2.74723e-12 max val=2.14573e-10 row[422]=-1 day = 23 min val=2.5522e-12 max val=0.314833 row[428]=-0.726678 day = 23 min val=2.35833e-12 max val=1.73831e-10 row[440]=-0.38895 day = 24 min val=2.83071e-12 max val=6.68554e-11 row[446]=-0.424308 day = 24 min val=2.38349e-12 max val=9.0038e-11 row[449]=-0.325618 day = 24 min val=2.88308e-12 max val=7.77122e-11 row[472]=100 day = 26 min val=0.0537183 max val=1.77114e-12 row[477]=100 day = 26 min val=0.0582241 max val=1.79152e-12 row[478]=100 day = 26 min val=0.0325335 max val=1.77199e-12 row[479]=100 day = 26 min val=0.0997524 max val=1.70957e-12 row[480]=100 day = 26 min val=0.0212184 max val=1.75241e-12 row[481]=100 day = 26 min val=0.0546691 max val=1.87567e-12 row[482]=100 day = 26 min val=0.0866728 max val=1.86261e-12 row[483]=100 day = 26 min val=0.0348345 max val=1.65861e-12 row[484]=100 day = 26 min val=0.0719359 max val=1.51472e-12 row[485]=100 day = 26 min val=0.323769 max val=1.52836e-12 row[486]=100 day = 27 min val=0.122186 max val=1.63422e-12 row[487]=100 day = 27 min val=0.0589922 max val=1.4626e-12 row[488]=100 day = 27 min val=0.0313694 max val=1.7076e-12 row[489]=100 day = 27 min val=0.0413175 max val=1.74454e-12 row[490]=100 day = 27 min val=0.0632407 max val=1.79693e-12 row[491]=100 day = 27 min val=0.0315268 max val=1.72677e-12 row[492]=100 day = 27 min val=0.0477631 max val=1.69113e-12 row[493]=100 day = 27 min val=0.0162712 max val=1.76216e-12 row[494]=100 day = 27 min val=0.0320612 max val=1.68608e-12 row[495]=100 day = 27 min val=0.175491 max val=1.60306e-12 row[496]=-0.883723 day = 27 min val=2.75924e-12 max val=5.71277e-10 effective rows=119 out of 504


Branchを繰り返した結果、UB=1348の整数解時では、全RowPriceが整数となりました。

    row[450]=100 day = 25 min val=0 max val=0 row[451]=100 day = 25 min val=0 max val=0 row[452]=-1 day = 25 min val=0 max val=0 row[453]=100 day = 25 min val=0 max val=0 row[454]=100 day = 25 min val=0 max val=0 row[455]=100 day = 25 min val=0 max val=0 row[456]=100 day = 25 min val=0 max val=0 row[457]=100 day = 25 min val=0 max val=0 row[458]=100 day = 25 min val=0 max val=0 row[459]=-1 day = 25 min val=0 max val=0 row[460]=100 day = 25 min val=0 max val=0 row[461]=100 day = 25 min val=0 max val=0 row[462]=100 day = 25 min val=0 max val=0 row[463]=100 day = 25 min val=4.44089e-16 max val=0 row[464]=-1 day = 25 min val=0 max val=0 row[465]=100 day = 25 min val=0 max val=0 row[466]=100 day = 25 min val=0 max val=0 row[467]=100 day = 25 min val=0 max val=0 row[468]=100 day = 26 min val=0 max val=0 row[469]=-1 day = 26 min val=0 max val=0 row[470]=-1 day = 26 min val=0 max val=0 row[471]=100 day = 26 min val=-4.44089e-16 max val=0 row[472]=-1 day = 26 min val=0 max val=0 row[473]=-1 day = 26 min val=0 max val=0 row[474]=100 day = 26 min val=0 max val=0 row[475]=-1 day = 26 min val=0 max val=0 row[476]=100 day = 26 min val=0 max val=0 row[477]=100 day = 26 min val=0 max val=0 row[478]=100 day = 26 min val=0 max val=0 row[479]=100 day = 26 min val=-4.44089e-16 max val=0 row[480]=-1 day = 26 min val=0 max val=0 row[481]=-1 day = 26 min val=0 max val=0 row[482]=-1 day = 26 min val=0 max val=0 row[483]=100 day = 26 min val=1 max val=0 row[484]=-1 day = 26 min val=0 max val=0 row[485]=100 day = 26 min val=0 max val=0 row[486]=100 day = 27 min val=0 max val=0 row[487]=-1 day = 27 min val=0 max val=0 row[488]=-1 day = 27 min val=0 max val=0 row[489]=-1 day = 27 min val=0 max val=0 row[490]=-1 day = 27 min val=0 max val=0 row[491]=-1 day = 27 min val=0 max val=0 row[492]=-1 day = 27 min val=0 max val=0 row[493]=-1 day = 27 min val=0 max val=0 row[494]=100 day = 27 min val=1 max val=0 row[495]=100 day = 27 min val=2 max val=0 row[496]=-1 day = 27 min val=0 max val=0 row[497]=100 day = 27 min val=0 max val=0 row[498]=-1 day = 27 min val=0 max val=0 row[499]=100 day = 27 min val=-8.88178e-16 max val=0 row[500]=-1 day = 27 min val=0 max val=0 row[501]=-1 day = 27 min val=0 max val=0 row[502]=-1 day = 27 min val=0 max val=0 row[503]=100 day = 27 min val=0 max val=0 effective rows=504 out of 504

一瞬、「こんなに効いていないのが支配的であるのなら、とりあえず制約を外して..」という高速化を思いついたのですが、むしろ上のような状況の方が特殊であることが分かりました。instance13の方が特殊、ということです。残念。

ちなみに、整数解時、row[494][495]のスラックが整数になっています。これは、LB時にもその萌芽が見られます。Lpsolverは、ベクトル的に最適解に近い解を出力する、ということを基にして(前提にして)解くのがMIPSolve的な解法となります。

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. もし見つからない場合は「出願ソフト自体を一度閉じる」
    • どの画面が原因か分からない場合は、一度インターネット出願ソフト自体を [×] で終了させてください。
    • ソフトを閉じて、もう一度起動し直すことで、ロックされていた表示機能が強制的にクリアされます。