星期六和上次那个拿到德国博士的老大哥吃火锅,期间又是一顿神侃,不一阵就有剑拔弩张脸红脖子粗的唇枪舌战。话题一转,又聊到这位老兄的毕设上。他说他的毕设挺惨,被老师无故拖成一年,主要是因为他导师对他做的东西不了解,所以一开始就定的方向后来看是不靠谱,做不出来。
想想自己,好像情况也很类似。现在用的这个软件老师也没用过,当时就是我一个人在玩,生物组那方面的人一方面数学和计算机很白痴,不懂这个新方法的美丽,另一方面比较保守,觉得传统方法做的熟了,不知道是否有必要再重新熟悉这个;电脑组我们这边是觉得这东西太强大了,可就是不知道什么生物系统用它做可以显现出比传统方法要优越的地方,试了很多模型感觉都不到点子上而且仿佛比传统方法要差。尝试了几个月,还是没有头绪,感觉就和爱迪生试电灯泡一样。眼看毕业期限将近,人也不自觉心浮气躁起来。
估计这才叫做基础学科学问吧,有时候即使期限将近,可是没有就是没有,做不出或者是没有完全验证的结果是不能拿出来的。现在看估计我可以写一篇《为什么这个软件失败的100个理由》,而不是《为什么要用这个软件的100个理由》。看来我还是适合做技术,唉,早知道选其他人的课题了,天天做数据虽然枯燥,但是出结果还是容易。
今天又收到导师给我发的信:“看来我们以前的种种尝试其实是不那么重要的,我们的重心应该放到XX点上,虽然最后我们可能做的只是皮毛,但是回报会在未来的某个时间出现。。。”。我想如果真要费这么大劲才能搞出一个硕士论文,我希望回报是给我一份好工作。
Also posted in Life, Thoughts | Tagged 论文 |
This is a log for my thesis study on Stochastic Pi-Calculus Machine (SPiM).
One thing that disturbs me a lot is there is no global variable in SPiM. My method is to define a process that broadcast a value on some global channel all the time, so any other processes can inquire this value by simply monitor the output on this channel. Another process can be used to modify this global value by sending a specific parameter on that broadcast process to trigger the switch inside.
My experimental codes:
(* Global Value *)
directive sample 1000.0 1000
directive plot A();B()
new pressure@1.0:chan(float)
new keep@1.0:chan(float)
new change_keep@1.0:chan(float)
val step = 1.0
val re1=1.0
val re2=0.1
let A() = (
do delay@re1; (B()|Press(step))
or ?keep(n); delay@re1/n; (B()|Press(step))
)
and B() = (
delay@re2; (A()|Press((-1.0)*step))
)
and Press(p:float) = (
?keep(current_p);!change_keep(current_p+p)
)
and keeper(n:float) = (
if n > 0.0
then
(do !keep(n);keeper(n)
or ?change_keep(current_p);keeper(current_p)
)
else
keeper(1.0)
)
run (100 of A()|50 of B()|keeper(1.0))

The only problem for now is some processes seemed missing, therefore could not provide a control over the A() production based on pressure changes… Still working on it…
This is a log for my thesis study on Stochastic Pi-Calculus Machine (SPiM).
Here is a sample code for implementing hill-type equation in SPiM:
directive sample 10.0 1000
directive plot sender();receiver()
directive graph
new comm@1.0:chan(float)
let sender(n:float) = (
!comm(n);
sender(n/2.0)
)
and receiver() = (
do delay@1.0; receiver()
or ?comm(n); delay@n
)
run (sender(1.0)|500 of receiver())
You will get a curve looks like this:

The receiver()’s degrade time is controlled by n which becomes half fold every stochastic time period. For more complex equations I think you can modify sender() and pass your private channel for communication though the parameters. Then the result will not be seen by any other processes, hopefully:). But I haven’t test it yet.