integerConstraint
説明
混合整数線形計画法ソルバー intlinprog の拡張整数変数のインデックスを指定します。拡張整数変数の型は整数、半連続、および半整数です。詳細については、拡張整数変数を参照してください。
作成
説明
は、intcon = integerConstraint(Name=Value)intcon 引数の intlinprog に渡される変数が拡張整数変数であると指定します。たとえば、変数 x の最初の 5 つのインデックスが半連続、次の 5 つが整数である場合は、intcon = integerConstraint(SemiContinuous=1:5,Integer=6:10) を設定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: intcon = integerConstraint(Integer=1:4,SemiContinuous=5:9) は、インデックス 1 ~ 4 を整数変数、インデックス 5 ~ 9 を半連続変数として指定します。
整数変数のインデックス。正の整数のベクトルとして指定します。たとえば、1 ~ 21 の奇数インデックスをもつ変数が整数値の場合、次のように指定します。
intcon = integerConstraint(Integer=1:2:21);
つまり、intcon が変数 x に適用される場合、この制約は変数 x(1)、x(3)、x(5)、…、x(21) が整数値をもつことを意味します。
Integer、SemiContinuous、および SemiInteger ベクトルは異なるエントリをもつ必要があります。変数インデックスを複数のベクトルに含めることはできません。
ヒント
変数の型が Integer のみの場合は、integerConstraint 関数を使用せずにインデックスを整数ベクトル intcon として渡すことができます。
この引数は Integer プロパティを設定します。
半連続変数のインデックス。正の整数のベクトルとして指定します。たとえば、変数 1 ~ 4 が整数値、変数 5 ~ 9 が半連続である場合、次のように指定します。
intcon = integerConstraint(Integer=1:4,SemiContinuous=5:9);
この引数は SemiContinuous プロパティを設定します。
半整数変数のインデックス。正の整数のベクトルとして指定します。たとえば、変数 10 ~ 20 が半整数、変数 1 ~ 9 が半連続である場合、次のように指定します。
intcon = integerConstraint(SemiInteger=10:20,SemiContinuous=1:9);
この引数は SemiInteger プロパティを設定します。
プロパティ
整数インデックス。正の整数のベクトルとして返されます。
データ型: double
半連続インデックス。正の整数のベクトルとして返されます。
データ型: double
半整数インデックス。正の整数のベクトルとして返されます。
データ型: double
例
変数インデックス 1 および 2 が半整数、変数インデックス 3 ~ 5 が半連続、変数インデックス 10 が整数、残りのインデックスが連続 (既定の設定) であると指定します。
intcon = integerConstraint(SemiInteger=[1,2],SemiContinuous=3:5,Integer=10)
intcon =
IntegerConstraint with properties:
Integer: 10
SemiContinuous: [3 4 5]
SemiInteger: [1 2]
intcon は、プロパティが拡張整数変数である IntegerConstraint オブジェクトです。
これらの変数を混合整数線形計画問題で使用します。intlinprog ソルバーは既定で "highs" アルゴリズムを使用するため、IntegerConstraint オブジェクトを受け入れることに注意してください。
lb = [4 10 3/2 5/2 7/2 zeros(1,5)];
ub = 10*(1:10);
rng default
f = 10*randn(10,1) + 12;
A = 10*rand(20,10) - 15;
b = 10*rand(20,1);
[x,fval,eflag,output] = intlinprog(f,intcon,A,b,[],[],lb,ub)Running HiGHS 1.7.1: Copyright (c) 2024 HiGHS under MIT licence terms
Coefficient ranges:
Matrix [5e+00, 1e+01]
Cost [1e+00, 5e+01]
Bound [2e+00, 1e+02]
RHS [1e+00, 1e+01]
Presolving model
10 rows, 10 cols, 20 nonzeros 0s
0 rows, 5 cols, 0 nonzeros 0s
0 rows, 0 cols, 0 nonzeros 0s
Presolve: Optimal
Solving report
Status Optimal
Primal bound -382.267036084
Dual bound -382.267036084
Gap 0% (tolerance: 0.01%)
Solution status feasible
-382.267036084 (objective)
0 (bound viol.)
0 (int. viol.)
0 (row viol.)
Timing 0.01 (total)
0.01 (presolve)
0.00 (postsolve)
Nodes 0
LP iterations 0 (total)
0 (strong br.)
0 (separation)
0 (heuristics)
Optimal solution found.
Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 1e-06. The intcon variables are integer within tolerance, options.ConstraintTolerance = 1e-06.
x = 10×1
0
0
30
0
0
60
0
0
0
0
fval = -382.2670
eflag = 1
output = struct with fields:
relativegap: 0
absolutegap: 0
numfeaspoints: 1
numnodes: 0
constrviolation: 0
algorithm: 'highs'
message: 'Optimal solution found.↵↵Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 1e-06. The intcon variables are integer within tolerance, options.ConstraintTolerance = 1e-06.'
詳細
"拡張整数変数" は、整数値、"半連続"、または "半整数" の変数です。
整数値変数は、–12 や 1234567 などの標準的な倍精度変数で表される任意の整数値を取ることができます。整数変数の範囲を指定する必要はありません。
半連続変数は、値
0または下限から上限までの任意の実数値を取ることができます。範囲は厳密に正でなければならず、1e5以下にする必要があります。半整数変数は整数値であり、値
0または下限から上限までの任意の整数値を取ることができます。範囲は厳密に正でなければならず、1e5以下にする必要があります。
既定の "highs" アルゴリズムを使用する intlinprog ソルバーは、整数変数と拡張整数変数をサポートし、そのすべてが MATLAB® double 型をもちます。integerConstraint 関数を使用して変数の型を指定します。次の名前を使用して、整数または拡張整数である変数インデックスを指定します。
Integer— 整数変数インデックスSemiContinuous— 半連続変数インデックスSemiInteger— 半整数変数インデックス
指定されていない変数インデックスの既定の型は連続、つまり任意の実数値を取ることができる変数です。
たとえば、変数 1 ~ 5 が整数、11 ~ 20 が半連続、残りが連続であると指定するには、次のようにします。
intcon = integerConstraint(Integer=1:5,SemiContinuous=11:20);
代替機能
拡張整数変数に対する問題ベースのアプローチ
問題ベースのアプローチの場合、変数の作成時に optimvar で変数の型を指定します。
x = optimvar("x",Type="semi-continuous",... LowerBound=3,UpperBound=10) y = optimvar("y",2,Type="semi-integer",... LowerBound=[3,5],UpperBound=[10,20])
バージョン履歴
R2025a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)