• ベストアンサー

共同出荷の問題を解くアルゴリズムを探しています.

地域の農家が,共同で作物を出荷するときの問題を解くアルゴリズムを探してします. 魔方陣に近いと思いますが,参考になる書物やサイト,簡単に解くことができれば, 直接OKwaveの回答に記述していただいても構いません. <問題>  1)各農家は,来月一ヶ月で出荷できる作物の数量を報告して来ます.これを    出荷センターンに連絡します.  2)出荷センターは,市場の動向をみて,来月の出荷日と,その日の出荷数を   を決めて指示してきます.  3)地域の農家の役員は,各農家に対して出荷日ごとの出荷数を割り当てて指示    する必要があります.  4)出荷数は,できるだけ切りのいい数値を,偏りのないようにする必要があります. <例> 人間が解いた,解答例をエクセルに入力した例を,画像で示します. A~Fが農家,05/05  05/12  05/19  05/26 が出荷日です. EXCELのVBAで記述して配布し,各地区の役員さんの負担を少しでも 減らしたいと思います.

質問者が選んだベストアンサー

  • ベストアンサー
noname#140045
noname#140045
回答No.2

No.1です。お礼ありがとうございました。 まず、 1日の平均出荷数=全予定出荷数量/出荷予定日数(例では、100=400/4) 1地区・1日の平均出荷数=全予定出荷数量/(地区数*出荷予定日数)(例では16.6=400/(6*4)) これが、この計算での基礎となる数値だと思います。 これを元に「1地区・1日の平均出荷数」の最大値がどのくらいまでいいのかで「1日の平均出荷数」に割り当てていく感じになると思います。 (これはすでに質問者さんが私以上にご理解しているのは、私もわかっています) そして、これを補足1.のようにしても、最後の出荷日でつじつま合わせするのが、普通に考えた場合のアルゴリズムになってしまいます。 たぶん、それでは駄目なのだと思います。 1.のような考えだと、目的のプログラムはできないと思います。 いろいろなケースで最高となる解答を提示して、それの「何故なのか」を明文化することからやるべきだと思います。 闇雲に試行錯誤で、プログラムを作り続けることは時間の無駄で決して合理的な方法ではありません。 >補足2.予め半自動で計算して・・・ 半自動と言うよりは、可変部分に関してはパラメータとして変更可能なプログラムにすべきです。 >補足3.その後は人間に任せるということも・・・ これは、絶対にやるべきではありません。 理由は、もしこれでミスが発生した場合、誰も自分のミスとは認めません。 結果として、今まで通りに最初から手動でやるのが、最良の方法となるからです。 今まで、経験と勘でやっていたものに対して、要求仕様を明文化するのは大変な作業ですが、まさにこのような作業はコンピュータの得意とするところですし、手動以上の生産者側からの要求を受けいることもできるかも知れません。 もし次に書く事があれば、もう少し具体的なアルゴリズムを書きたいと思います。

その他の回答 (1)

noname#140045
noname#140045
回答No.1

ゴメンなさい。答えではありません。 せっかく自動化するのですから、人が手動でやるよりも劣るのでは、意味がありません。 そう考えると、もっとより良くするための仕様が抜けているような気がします。 (そもそもこれ例が、どれだけ具体的なものなのかもありますが) たとえば ・1日の最大出荷数はあるのか?(1地区および全地区) (この例では、D地区の120が1日で出荷してもいいのか) ・1つの地区の出荷日がどのくらい間隔があいてもいいのか? (この例では、5/5,5/26となってもいいのか) など、当人ならば当然のことでも、それを伝えないと結局自分たちが楽をするための自動化になってしまって、かえってトラブルが広がってしまいます。 このような数値を扱う計算は、コンピュータが得意とし、より的確な仕様が明示されれば、瞬時に人間よりも最適な解を求めることが可能です。

ys11_ok
質問者

補足

1.説明が不十分で,申し訳ありません.解答は幾通りもあると思っていましたので,解答を評価して,評点の高い順にオペレータに見せるシステムは別に用意するつもりでした.尚,A~Fは,地域ではなく農家単体としてください. 2.農家ごとに,一日の最適出荷数や最大出荷数は予め登録でますので,期間内の口数は,予め半自動で計算して,適当な配列に記憶して解答システムに渡すことはできます.(口数;期間内に,何回出荷して,それぞれ何個ずつにするかということ.たとえば,「Bは,30と30に分けて二日間で出荷するものとする.」いうようなこと.) 3.正確な答えでない,途中結果をオペレータに見せて,その後は人間に任せるということも,運用上はできます.

関連するQ&A