星期五, 10月 14, 2005

誤打誤撞

這幾天試圖整理迷宮的 PHP 程式,讓它看起來清爽漂亮些。

「整理」的工作,大致上就是清除一些非必要(或為了除錯而加上去)的函式,在一些地方加上註解,並重寫部分的程式碼。

奇怪的是,我發現一個「違反直觀」的現象:調整「讓迷宮多轉些彎」的參數後,若「多轉彎」的機率大於「走直線」的機率,迷宮怎麼反而看起來更少曲折?(例如,右邊的兩張迷宮圖,路徑都頗「迂迴」,但下方的迷宮就比上方的迷宮有較多的轉彎。)

咦,那我之前怎麼沒有發現?當初不就是因為覺得迷宮不夠蜿蜒,才加入「轉彎」的考量啊;而且,加入轉彎的參數後,迷宮不是也「真的」更蜿蜒曲折了嗎?(參考一個月前的 posts:稍微有些曲折的迷宮更為曲折的迷宮。)

這下可有趣了。根據經驗,這要嘛是自己在實作時,把參數的意義弄反了;否則就是程式不知道哪兒寫錯了,誤打誤撞後,讓加入多轉彎參數的結果,比沒有加入參數的輸出要來得曲折。

花了許多時間追蹤,才發現真的有另一個地方出了些差錯;而「負負得正」,兩個錯誤合起來,就產生出「看似正確」的結果。

如果沒有這番整理,雖然程式仍然可以產生曲折的迷宮;但不管怎麼說,這程式其實都是實作錯誤的。有趣的是,對於「產生曲折迷宮」的目的而言,這個錯誤的程式,或許還是「無傷大雅」、甚至「合於規格」的:我們只要把參數往相反的方向調整就好了(例如,希望得到「多轉彎」的效果,本來應該把「多轉彎」的參數調高,但現在只要反向調低即可)!

程式改好後,我突然有種感覺:「誤打誤撞」似乎也是「實驗」的一種有趣特性呢。

沒有留言: