#!/usr/bin/perl print < graph1 アルゴリズム工学データベース離散最適化

資源制約付スケジューリング

EOS &init; &get_form; &applet; &put_form; print <
4仕事3機械からなるジョブショップ問題を、 メタヒューリスティックスで解く過程を表示しています。 プログラム提供は京都大学の野々部さんです。
このアルゴリズムは OptSeq として製品化されています。

土村 展之(tutimura\@logopt.com)
<最終更新作成日時 2001年12月25日 > EOS ################################################################## sub init { # 表示順序が入れ替わらないためのオマジナイ use FileHandle; STDOUT->autoflush(1); print ""; @LEN = ( [ '5', '8', '2' ], [ '7', '3', '9' ], [ '1', '7','10' ], [ '4','11', '7' ], ); @MAC = ( [ '0', '1', '2' ], [ '2', '0', '1' ], [ '0', '2', '1' ], [ '1', '2', '0' ], ); } sub get_form { while(<>) { foreach $i (split(/&/)) { if ( $i =~ /^M(\d)(\d)=(\d)/ ) { $MAC[$1]->[$2] = $3; } elsif ( $i =~ /^L(\d)(\d)=(\d+)/ ) { $LEN[$1]->[$2] = $3; } } } } sub applet { print < EOS open(OUT,"| ./sch -draw -time 1 | ./sch2html" ); print OUT <[$step]." "; print OUT "resource: machine[" .($MAC[$job]->[$step]+1). "] (1)*inf}}\n"; } } print OUT < activity[1][2]} PRECEDENCE activity[1][2]_[1][3] = {activity[1][2] -> activity[1][3]} PRECEDENCE activity[2][1]_[2][2] = {activity[2][1] -> activity[2][2]} PRECEDENCE activity[2][2]_[2][3] = {activity[2][2] -> activity[2][3]} PRECEDENCE activity[3][1]_[3][2] = {activity[3][1] -> activity[3][2]} PRECEDENCE activity[3][2]_[3][3] = {activity[3][2] -> activity[3][3]} PRECEDENCE activity[4][1]_[4][2] = {activity[4][1] -> activity[4][2]} PRECEDENCE activity[4][2]_[4][3] = {activity[4][2] -> activity[4][3]} CONSTRAINT makespan = {weight: 1 expression: [completion_of sink] <= 0} EOS close( OUT ); print <
Java を有効にするとデモが表示されます。
Please enable Java.
EOS } sub put_form { print <
EOS for ( $job=0; $job<4; $job++ ) { print "\n"; for ( $step=0; $step<3; $step++ ) { print "\n"; } print "\n"; } print < EOS }
 1st stage2nd stage3rd stage
Job-" . substr( "ABCD", $job, 1 ) . "\n"; print "time