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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Q&A

1回答

2133閲覧

Pulpを用いた制約条件の記載(LpDotの内積がエラーとなる)

Nobu.Y

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

0グッド

0クリップ

投稿2021/06/16 12:42

前提・実現したいこと

Pythonでシフトの自動作成プログラム(pulpを使用)を作成しています。

対象となるシフトは、「各クラスを担当する講師」を自身が担当することができる「授業科目(曜日、時間帯、何週目かによって異なる)」に自動的に振り分けることを目的としています。

「同時間帯に異なる教室で開催される授業には割り振らない」という制約条件を実装中に以下のエラーメッセージが発生しました。

「同時間帯に異なる教室で開催される授業には割り振らない」を実装する方針としては、「同時間帯に開催される授業」のIndex(各授業のコマに相当)を取得し、そのIndexから取得した1行リスト同士(割り振られた講師(担当:1、担当なし:0))の内積がゼロになることを制約条件とすることで実現しようとしています。

Pulpでは非線形問題は解けないとのことですが、該当の箇所は1行のnp.arrayの内積で線形な計算に思えます。

発生している問題・エラーメッセージ

TypeError: Non-constant expressions cannot be multiplied

該当のソースコード

# mは目的関数 # 列 28,29,33は同時間帯に開催される授業を示す # V_Scheduleはシフトを示す変数 V_Schedule = np.array(addbinvars(C_Class, C_Teacher)) for i,r in df_Schedule[[28, 29, 33]].iterrows(): for i2, r2 in df_Schedule[[28, 29, 33]].iterrows(): if i != i2 and r.equals(r2): m += lpDot(V_Schedule[i], V_Schedule[i2]) == 0

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

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

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

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

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

guest

回答1

0

線形とは、独立変数に対する線形性です。

定数行列Aと変数ベクトルXの積は線形ですが、
変数ベクトルXと変数ベクトルYの内積は非線形です。

投稿2021/06/17 02:58

ppaul

総合スコア24666

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

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

Nobu.Y

2021/06/17 03:34

ご回答ありがとうございます。 変数ベクトル同士の内積は非線形となるのですね。 行列の内積ではなく、ビットがたつ値同士の積がゼロとなることを条件にできるよう修正してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問