配送センター(1つ)から、納品先へ製品を届けるトラックの台数を最小化することが目的です。簡単に説明させていただきますと、(まだアルゴリズムがうまく書けていないのですが…)
制約条件といたしましては
①納品先毎に個別の指定時間を設ける場合、指定無し(納品回数に関連:1日1回等)を加える場合と、2つの条件設定を考えております。
②物流センターからの出荷時間は24時間可能のものとする
まずトラック1台からスタートして、もし24時を過ぎたら2台目を発車させる…という具合に、トラックを増やしていきます。
ステップ1:配送先の決定.
例) 配送優先順位 182976534
納品先 123456789
この場合、優先順位の最も高い納品先4へ配送する.
ステップ2:
①顧客の需要量がトラック積載量よりも多かった時,
・需要量=需要量-トラック積載量
・トラック積載量=0
⇒ステップ4へ
②顧客の需要量がトラック積載量よりも少なかった時,
・トラック積載量=トラック積載量-需要量
・需要量=0
・納品先を消す
⇒ステップ5へ
ステップ4:
倉庫へ戻り満タンにする.
トラック積載量=トラック積載量+10
⇒ステップ1へ
ステップ5:発車可能時刻+配送時間+サービス時間+配送時間<24時ならステップ7へ
それ以外ならステップ1へ
ステップ6:
トラック=トラック+1
⇒需要量が0以上の配送場所があったらステップ7へ.
なかったら終了
ステップ7:ルート選択
顧客が複数だったら,ステップ1へ
顧客が一つだったら,ステップ2へ
理解していただけたか不安なんですけれども、説明が下手で申し訳ございません。
こちらのファイルのfunction関数を上記のアルゴリズムで書きたいです。
プログラミングがうまく書けません
Re:プログラミングがうまく書けません
プログラムが見にくすぎです。とても読んで欲しいと思っていると思えません。
きちんとインデントし、括弧の対応に応じて字下げし、
きちんと注釈を入れて下さい。
きちんとインデントし、括弧の対応に応じて字下げし、
きちんと注釈を入れて下さい。
Re:プログラミングがうまく書けません
とりあえず、プロトタイプ宣言はmain関数の前に書くのが一般的ではないでしょうか?
--------------------------------------------------------------------------------
/*前略*/
void init(int [/url][NBIT]); /* 関数 init の型、引数の型等の宣言 */
void shuffle(int [/url][NBIT]); /* シャッフル関数の宣言 */
void print0(int [/url][NBIT]); /* 表示用関数の宣言 */
void func(int [/url][NBIT],double *,double *); /* 関数 func の型、引数の型等の宣言 */
void print1(int [/url][NBIT], double [N], double [N]); /* 表示用関数の宣言 */
void roulette(double *,double *); /* 関数 roulette の型、引数の型等の宣言 */
void printpq(double *,double *); /* 表示用関数の宣言 */
void select(int [/url][NBIT],double *); /* 関数 select の型、引数の型等の宣言 */
void cross(int [/url][NBIT]); /* 関数 cross の型、引数の型等の宣言 */
void mutation(int [/url][NBIT]); /* 関数 mutation の型、引数の型等の宣言 */
void find_max(double *,double *,double *,double *);
void main()
{
/*以下略*/
--------------------------------------------------------------------------------
こんな感じです。
--------------------------------------------------------------------------------
/*前略*/
void init(int [/url][NBIT]); /* 関数 init の型、引数の型等の宣言 */
void shuffle(int [/url][NBIT]); /* シャッフル関数の宣言 */
void print0(int [/url][NBIT]); /* 表示用関数の宣言 */
void func(int [/url][NBIT],double *,double *); /* 関数 func の型、引数の型等の宣言 */
void print1(int [/url][NBIT], double [N], double [N]); /* 表示用関数の宣言 */
void roulette(double *,double *); /* 関数 roulette の型、引数の型等の宣言 */
void printpq(double *,double *); /* 表示用関数の宣言 */
void select(int [/url][NBIT],double *); /* 関数 select の型、引数の型等の宣言 */
void cross(int [/url][NBIT]); /* 関数 cross の型、引数の型等の宣言 */
void mutation(int [/url][NBIT]); /* 関数 mutation の型、引数の型等の宣言 */
void find_max(double *,double *,double *,double *);
void main()
{
/*以下略*/
--------------------------------------------------------------------------------
こんな感じです。
Re:プログラミングがうまく書けません
添付されたプログラムは、遺伝的アルゴリズムの全然別の関数の最大値を求めようとしたプログラムで
今回の課題ではありませんね。つまり、自分で作ったプログラムではないということです。
こういう課題(遺伝的アルゴリズム)が出題されたということは、それなりの授業を受けたと思われますし
目的関数をどうするのか仕様をはっきりしてもらわないと、こちらも考えようがありません。
(正確には考えたくありません。だって難しいんだもん。)
丸投げはやめましょう。
今回の課題ではありませんね。つまり、自分で作ったプログラムではないということです。
こういう課題(遺伝的アルゴリズム)が出題されたということは、それなりの授業を受けたと思われますし
目的関数をどうするのか仕様をはっきりしてもらわないと、こちらも考えようがありません。
(正確には考えたくありません。だって難しいんだもん。)
丸投げはやめましょう。
Re:プログラミングがうまく書けません
ちゅんこさんの質問したいことは、
No:24960 に書かれたとおりで、
プログラムの書き方(見た目、正規表現?、書式)を添付したサンプル(全く別のプログラム)のようなイメージで書きたい。
とおっしゃっているのだと思います。
なので、フローチャートを示してあげるなり、
全部(もしくは一部)のプログラムを見せてあげるなり、
取っ掛かりを回答してあげればよいのではないでしょうか?
ちょっと私は仕事が忙しく、チラ見しただけなので、回答できるほど読み込んでいません。
時間が取れれば回答してあげたいですが^^;
回答者の皆さん、お手すきな方はどうか導いてやってください^^
No:24960 に書かれたとおりで、
プログラムの書き方(見た目、正規表現?、書式)を添付したサンプル(全く別のプログラム)のようなイメージで書きたい。
とおっしゃっているのだと思います。
なので、フローチャートを示してあげるなり、
全部(もしくは一部)のプログラムを見せてあげるなり、
取っ掛かりを回答してあげればよいのではないでしょうか?
ちょっと私は仕事が忙しく、チラ見しただけなので、回答できるほど読み込んでいません。
時間が取れれば回答してあげたいですが^^;
回答者の皆さん、お手すきな方はどうか導いてやってください^^