質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

700閲覧

配列の各要素で制約式を作りたい

reina1125

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/11/16 15:07

編集2018/11/27 02:52

java

1コード 2public class Automation { 3 static public void main(String[] args) throws IloException { 4IloCplex cplex = new IloCplex(); 5int t1 =3 6int t2 =2; 7int a=2; 8//変数の定義 9int tmax = Math.max(t1, t2); 10IloIntVar[] X = cplex.intVarArray((t1+1)*(t2+1)-1,0,tmax); 11//制約式(1) 12IloLinearNumExpr sum = cplex.linearNumExpr(); 13for(int i=0, j=1; i<X.length; i++,j++) { 14 sum.addTerm((int)j/(t2+1),X[i]); 15 cplex.addLe(sum1,t1); 16} 17cplex.addEq(sum1,t1); 18 19//制約式(2) 20IloIntVar[] array1 = cplex.intVarArray(X.length,0,t1*tmax); 21 for(int i=0, j=1; i<X.length; i++,j++) { 22 array1[i]= (j/(t2+1))*X[i]; //エラー箇所 23 cplex.addLe(array1[i],a); 24 } 25} 26}

制約式(1)
X[2]+X[3]+X[4]+2X[5]+2X[6]+2X[7]+3X[8]+3X[9]+3X[10]= 3
制約式(2)
X[2]<=a
X[3]<=a
X[4]<=a
2X[5]<=a
2X[6]<=a
2X[7]<=a
3X[8]<=a
3X[9]<=a
3X[10]<=a
という風に制約式を作りたいです。
制約式(1)の各項が全て変数a以下になるように制約を加えたものが制約式(2)になります。
(1)の方は問題ないのですが、(2)で
「演算子 * は引数の型 int, IloIntVar で未定義です」
と表示されてしまいます。
係数j/(t2+1)と各項X[i]を掛けて配列array1に代入し、それをforで回して求めようとしてます。
演算子が未定義というのもよくわかりません。
原因がわかる方、よりスマートな書き方があれば教えて頂きたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

IloIntVar[] X = cplex.intVarArray((t1+1)*(t2+1)-1,0,tmax);

で定義されているので、

X[i]としても、そこで取得できるのが、IloIntVar 型 であり、それは数値ではないので計算できないのではないでしょうか。

投稿2018/11/16 15:17

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reina1125

2018/11/16 15:25

回答ありがとうございます。あ、そうゆうことなんですね!では、どのように修正すればいいでしょうか?
A-pZ

2018/11/16 15:53

IloIntVar 型に、何らかの数値を取得するメソッドはないでしょうか。それを呼び出せばよいかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問