#!/usr/local/bin/perl require "ctime.pl"; # this is for 3-coloring examples. # time limit is specific to smallk invocation $nclrs = 3; # specific for 3-coloring problems if ($#ARGV != 10) { print "Usage: batch.perl begv endv step begdeg enddeg stepdeg "; print "startseed beginsamp endsamp gentype timelim\n"; print "\tbegv endv step -- range of n, e.g. 300 500 50\n"; print "\tbegdeg enddeg stepdeg -- degree range e.g. 4.0 6.0 0.01\n"; print "\tstartseed -- uses pearl random to generate the seeds\n"; print "\t\tfor the generator and search programs\n"; print "\tbeginsamp endsamp -- sample sets: e.g. 1 10 or 11 20\n"; print "\t\tthis allows running multiple processors to generate a sample\n"; print "\t\tand allows a sample set to be extended\n"; print "\tgentype -- must be one of iid, evac or flat -- the graph type\n"; print "\ttimelim -- a time limit used for smallk,etc.\n"; print "Look for files 'record_[0-9]+' for a list of arguments\n"; print "used in the generator etc. in case you wish to recreate an\n"; print "experiment\n"; print "This particular example generates 3-colorable graphs. Modify\n"; print "this perl script for other color ranges, or other graph types\n"; print " -- \n\n"; exit(1); } $begv = $ARGV[0]; $endv = $ARGV[1]; $step = $ARGV[2]; $begdeg = $ARGV[3]; $enddeg = $ARGV[4]; $stepdeg = $ARGV[5]; $startseed = $ARGV[6]; $beginsamp = $ARGV[7]; $endsamp = $ARGV[8]; $gentype = $ARGV[9]; $timelim = $ARGV[10]; if ($begv > $endv) { print "begin $begv > end $endv\n"; exit(1); } if ($begdeg >= $enddeg) { print "begin density $begdeg >= end density $enddeg\n"; exit(1); } if ($beginsamp >= $endsamp) { print "begin samp $beginsamp >= end samp $endsamp\n"; exit(1); } if (($gentype ne "flat" ) && ($gentype ne "evac" ) && ($gentype ne "iid" ) ) { print "Invalid generator type $gentype -- must be evac, flat or iid\n"; exit(1); } $recfile = "record_${gentype}_$$"; system("date >$recfile"); $outs = "Parameters: ".join(' : ', @ARGV); system ("echo $outs >>$recfile"); srand($startseed); for($size=$begv; $size <=$endv; $size += $step) { if (!(-e "$size")) { umask 0077; mkdir $size,0700; } chdir "$size"; for($degree = $begdeg; $degree < $enddeg; $degree += $stepdeg) { $k = sprintf("%4.2f",$degree); if (!(-e $k)) { umask 0077; mkdir $k,0700; } chdir "$k"; for($i=$beginsamp; $i<=$endsamp;$i++) { if ( -e "g_$i" ) { $outs = "g_$i exists - skipping"; system("echo $outs >>$recfile"); } else { $date = &ctime(time); chop $date; $outs = "$date: $size/$degree/g_$i "; $seed = int(rand(2147483647)); $outs = $outs." gen $seed "; # Compute the probability that produces the degree on # average with equi-partite divisions. approximate.. # DOES NOT WORK ACCURATELY FOR OTHER CLASSES!! $low = int($size / $nclrs ); $nhigh = $size - ($low * $nclrs); $nedges = ($degree * $size); $maxedges = ($size*($size-1) ) - ($low *( (($low -1) * ($nclrs - $nhigh)) + (($low+1) * $nhigh) )); # print $low, " ", $nhigh, " ", $nedges, "\n"; $den = $nedges / $maxedges; open(fd,">genin_$$"); if ($gentype eq "iid") { printf(fd "0\n%d\n2\n%d\n${nclrs}\n1\n%9.7f\n0\n", $seed,$size,$den); } else { if ($gentype eq "flat") { printf(fd "0\n%d\n6\n%d\n${nclrs}\n%9.7f\n0\n0\n", $seed,$size,$den); } else { if ($gentype eq "evac") { printf(fd "0\n%d\n2\n%d\n${nclrs}\n7\n%9.7f\n0\n0.0\n1\n${nclrs}\n0\n", $seed,$size,$den); } else { $outs = "Corrupted gentype"; system("echo $outs >>$recfile"); exit(1); } } } close(fd); system("generator graph_$$ genout_$$"); $seed = int(rand(2147483647)); $outs = $outs . " search $seed"; system("echo $outs >>$recfile"); # REPLACE THE FOLLOWING LINES WITH CALL(S) TO YOUR PROGRAM system("smallk graph_$$ $seed $nclrs $timelim >g_$i"); # clr2sat is a converter to change color to SAT. system("clr2sat graph_$$ $nclrs unique break >cvrt_$$"); #system("walksat -seed $seed -cutoff 100000000 -tries 10 -numsol 1 -novelty+ &wlk_$i"); system("satz-rand -cutoff luby 1000 -restart 500 graph_$$.cnf >satzstd_$i"); # A different conversion -- did not work as well. #system("clr2sat graph_$$ $nclrs log break >cvrt2_$$"); #system("walksat -seed $seed -cutoff 100000000 -tries 10 -numsol 1 -novelty &lg_$i"); #system("satz-rand -cutoff luby 1000 -restart 20 graph_$$.cnf >satzlog_$i"); } } chdir ".."; } chdir ".."; }