雖然晚了許多,不過剛剛寫的程式就是要來現一下啊~
剛考完試的我就直接趕回戰場繼續寫啊~(雖然不知道我會不會又三分鐘熱度)
下面是剛出爐的「競爭」模型,不過這是「朋友」的概念,他會在街道的盡頭走回來,他會告訴你他那一邊的所有狀況(其實就是分數),並且用手機直撥給你。在第21篇的第二點有說明過,只不過這次的對手不會拿取任何一朵花,看你們兩個人一起合作可不可以拿到最大值的花~~
程式在下面:
<?php
if (isset($argv))
for ($i=1;$i<count($argv);$i++)
{
$it = explode("=",$argv[$i]);
$_GET[$it[0]] = $it[1];
}
$n="\n";
$brn="<br />\n";
date_default_timezone_set("Asia/Taipei");
//設定變數
//mode=0 無變數
//mode=1 凋謝速率
//mode=2 員工貢獻度
//mode=3 競爭
//mode=4 參考 v(朋友)
if(isset($_GET['debug'])) $debug=$_GET['debug'];
else $debug=1;//顯示步驟
if(isset($_GET['from'])) $from=$_GET['from'];
else $from=0;
if(isset($_GET['to'])) $to=$_GET['to'];
else $to=100;
if(isset($_GET['choice_time'])) $choice_time=$_GET['choice_time'];
else $choice_time=1;
if(isset($_GET['limit'])) $limit=$_GET['limit'];
else $limit=100;
if(isset($_GET['gap'])) $gap=$_GET['gap'];
else $gap=0.1;
if(isset($_GET['loop_num'])) $loop_num=$_GET['loop_num'];
else $loop_num=50;
printf("date,percent,=>,best,fail,fine $n");
for($k=$from;$k<=$to;$k=$k+$gap){
$percent=$k;
$best=0;
$fail=0;
$fine=0;
if($debug>1){
echo "From: ", $from, $n;
echo "To: ", $to, $n;
echo "Limit: ", $limit, $n;
echo "Percent: ", $percent, $n;
echo "Border: ", $limit*$percent/100, $n;
}
for($j=0;$j<$loop_num;$j++){
$max_num=0;
$max_percent=$limit*$percent/100;
$percent_num=0;
$friend_percent_num=0;
$choice=0;
$time=$choice_time;
$thisnum=range(1,$limit,1);//(小,大,差)
shuffle($thisnum);//洗牌
for($i=0;$i<$limit;$i++){
//$num=rand($from, $to);
$num=$thisnum[$i];
$friend_num=$thisnum[$limit-$i-1];
if($max_num<=$num) $max_num=$num;
if($max_num<=$friend_num)$max_num=$friend_num;
if($i<$max_percent) {
if($percent_num<$num) $percent_num=$num;
//echo "P:", $percent_num, $n;
}
if($friend_percent_num<$friend_num) $friend_percent_num=$friend_num;
if($debug>0) echo $i+1, " ", $num, " ", $friend_num, " ", $percent_num, " ", $friend_percent_num, $n;
if($time>0 and $num>$percent_num and $num>=$friend_percent_num) {
$choice=$num;
$time=$time-1;
}
}
if($debug>0){
echo "Choice: ", $choice, $n;
echo "Max: ", $max_num, $n;
}
if($max_num==$choice) $best++;
if($choice==0) $fail++;
if($max_num>$choice and $choice>0) $fine++;
}
$thedate=date("m-d H:i");
printf("%s,%.1f => %.7f %.7f %.7f (%.0f/%.0f)\n", $thedate, $percent, $best/$loop_num, $fail/$loop_num, $fine/$loop_num, log($loop_num, 10), log($limit, 10));
}
?>
之後大概跑了一下,數據長下面的樣子:
date,percent,=>,best,fail,fine
01-18 23:16,0.0 => 0.1522000 0.0000000 0.8478000 (4/2)
01-18 23:16,1.0 => 0.2913000 0.0089000 0.6998000 (4/2)
01-18 23:16,2.0 => 0.3605000 0.0197000 0.6198000 (4/2)
01-18 23:16,3.0 => 0.4239000 0.0285000 0.5476000 (4/2)
01-18 23:16,4.0 => 0.4663000 0.0402000 0.4935000 (4/2)
01-18 23:16,5.0 => 0.4903000 0.0507000 0.4590000 (4/2)
01-18 23:16,6.0 => 0.5175000 0.0598000 0.4227000 (4/2)
01-18 23:16,7.0 => 0.5476000 0.0683000 0.3841000 (4/2)
01-18 23:16,8.0 => 0.5737000 0.0811000 0.3452000 (4/2)
01-18 23:16,9.0 => 0.5850000 0.0904000 0.3246000 (4/2)
01-18 23:16,10.0 => 0.6037000 0.1026000 0.2937000 (4/2)
01-18 23:16,11.0 => 0.6156000 0.1075000 0.2769000 (4/2)
01-18 23:16,12.0 => 0.6246000 0.1210000 0.2544000 (4/2)
01-18 23:16,13.0 => 0.6329000 0.1337000 0.2334000 (4/2)
01-18 23:16,14.0 => 0.6514000 0.1371000 0.2115000 (4/2)
01-18 23:16,15.0 => 0.6566000 0.1502000 0.1932000 (4/2)
01-18 23:16,16.0 => 0.6580000 0.1602000 0.1818000 (4/2)
01-18 23:16,17.0 => 0.6574000 0.1659000 0.1767000 (4/2)
01-18 23:16,18.0 => 0.6597000 0.1828000 0.1575000 (4/2)
01-18 23:16,19.0 => 0.6792000 0.1831000 0.1377000 (4/2)
01-18 23:16,20.0 => 0.6656000 0.2082000 0.1262000 (4/2)
01-18 23:16,21.0 => 0.6664000 0.2110000 0.1226000 (4/2)
01-18 23:16,22.0 => 0.6620000 0.2283000 0.1097000 (4/2)
01-18 23:16,23.0 => 0.6737000 0.2285000 0.0978000 (4/2)
01-18 23:16,24.0 => 0.6689000 0.2407000 0.0904000 (4/2)
01-18 23:16,25.0 => 0.6648000 0.2555000 0.0797000 (4/2)
01-18 23:16,26.0 => 0.6602000 0.2635000 0.0763000 (4/2)
01-18 23:16,27.0 => 0.6616000 0.2715000 0.0669000 (4/2)
01-18 23:16,28.0 => 0.6625000 0.2793000 0.0582000 (4/2)
01-18 23:16,29.0 => 0.6529000 0.2900000 0.0571000 (4/2)
...
發現總共有100家的時候,從第23家或第24家後再選擇拿取可以拿到最大值的機率會到67%左右~大發現~~
我瘋了。
不過值得一提的是,我這次寫程式的速度終於有變快一些了,修bug的時間也變短了。只不過還是會常常忘記";"這個東西...