2013年7月9日 星期二

布拉格庫倫洛夫維也納十天自由行

我們一行三人今天七月九日晚上出發,凌晨乘芬蘭航空夜機約十小時航程先飛芬蘭再飛捷克,第二程須要個多小時,但轉機要等候約三小時。我們到達布拉格預計是當地時間七月十日中午時分,以格林尼治計算捷克時間遲香港七小時,當地正實施夏令時間。

在航機上發生一段小插曲令我覺得很失禮,我在找廁所時因受那個亮光的廁所人型標誌影響,想標誌旁的小房間定是廁所吧,因見有拉門的凹槽。我便用力拉那度門,但拉不開,再上下打量又驚見凹槽旁有鎖孔。當時正覺疑惑之際又見工作人員忙碌備餐無人可問,突然閃出一個阿叔用廣東話一邊口述一邊用手勢指向我身后的一個小房間說這個才是廁所還多次提醒我要鎖上門。我怱怱向他道謝便閃入廁所。我在他心中定是首次乘航機出外的大鄉里。

我們在芬蘭等轉機時便到候機處商舖逛逛,總覺價錢很高很貴。罐裝可樂賣二元半歐羅,那些毛公仔貨品大都是中國製造的。

飛機著陸前我們在高空看見機場附近全是綠色草原及很多一組一組的樹林,那些樹都是挺拔高聳的,還有分散的,很北歐風格的低矮房子,景色怡人。

我們取了行李,在機場辦了三件事 : 到Vodafone櫃位購買價值400克郎只能在捷克境內用的上網SIM咭有1G數據量,到找換店用歐羅兌換克郎及找到來接載我們去Hotel Salvator的司機。

待續……

2013年5月28日 星期二

鄧顯人

親愛的劉校長

雖然因工作關係我和太太都未能繼續參與家教會事務,但對校務的動向,我們從未掉以輕心。知悉今年是鄧顯中學三十週年校慶的好日子,校方將舉辦一連串的慶祝活動,其中包括綜藝晚會和開放日,我和太太謹在此表達由衷祝賀。

鄧顯中學從一所藉藉無名的屋邨學校,經兩任校長丶不同時期的老師丶家長及同學三十年苦心經營,令鄧顯中學整體成就超越衆多傳統名校,不止揚名於新界北區,更擠身成為全港高知名度的英文文法中學。誠如校長在學校網頁所說:數拾年的奮鬥成就了今天的鄧顯中學,絕非僥倖二字可以擄掠用决心丶汗水及努力不懈蒂結出來的纍纍碩果。

在鄧顯中學,我可以說是一位資深家長。我的三名女兒:智臨、解澄和灝節都在母校接受教育。從一九九七年智臨入讀中一至今年小女兒灝節中七畢業,我親歷母校穩步向前已經有十五個年頭;加上過去十年間,我每個星期天早上都回母校参加家長太極班,因而與母校的關係更形密切。

鄧顯中學從建校的第一天開始就秉承其貫徹始終的辧學宗旨:竭盡所能提供德丶智丶體丶群丶美並重的全人教育,期望每一名畢業同學日後可成為智識淵博丶人格高尚的領袖人物及社會棟樑。依我之見,這祟高的辦學宗旨正正與鄧顯中學短短四字校訓<明道立德 : grasp principles, cultivate virtues>相互呼應。若每一名畢業同學在應用的層面上都能夠理解及掌握事物變化的各項方法丶規律和原理,並個人堅持不怠地栽培各種美德;這四字校訓不就是欲善其全人教育之事所需利之器嗎?

鄧顯學生的學術成就可以從整體公開試彪炳成績獲得客觀肯定。説實話,每所學校都不乏有能力考取相對良好等級成績的高材生,但鄧顯學生令人折服之處是整體的優良成績。校方為了照顧學生的學習差異,老師們犠牲了休息的時間丶錯過了與家人相聚的美好時刻,留校参與拔尖補底的工作,提升學生的學術水平。這樣的安排,一方面能提高整體學術表現,另一方面又照顧到尖子學生的特別需要,使他們成績大放異彩,更上一層樓。

鄧顯學生在課餘期間積極投入於運動丶舞蹈丶音樂及環保各項的活動,並取得嬌人佳績:花式跳繩隊獲得在英國舉行的世界赛冠軍丶籃球隊獲全港學界體育聨會大埔和北區分會總冠軍丶舞蹈組再次在舞蹈節揚威丶在學校天台建設綠化園地並讓學生進行有機耕種丶建立太陽能氣象站等等。


這些大型課餘活動,参與的學生人數衆多,若得不到大多數家長的支持,絕不可能取得如此佳績。家長的普遍心態總希望學生能投入更多時間在課本的學習上,很多都抗拒花時間在課餘活動中。但鄧顯中學的家長們向學校管理階層投下絕對信任的一票,為協助學校完成辧學宗旨而樂意讓子女出席課餘活動。無何置疑,家長教師會過去十五年的工作是家長信心的基礎及來源。近年家長董事制度的確立,亦能進一步加強家教會作為家校溝通的橋樑角色。另一方面,辦學團體的道教信仰配合校方提供有關的宗教教育,有效協助學生提升道德水平及如何正確認識人生價值觀。從來鄧顯學生都給人留下守紀律丶以禮待人及品學兼優的好印象。

過去的拾多年,鄧顯中學的畢業生服務社會的各行各業,不遺餘力回饋社會,讓母校的美名,留在社會的每一角落。這是對母校的最好回報。

教育局最近完成的校外評核高度讃揚鄧顯中學。評核報告指出,校方成功營做和諧丶關愛的校園氣氛令同學們有在家的感覺。鄧顯學生對母校有强烈歸屬感並能夠享受校園生活,並以身為<鄧顯人 TangHinian>而感嬌傲自豪。報告書對校長的領導才能丶經驗及無私奉獻給于高度評價,同時亦表掦學校不同崗位員工的團隊精神,使校長訂定的教學發展方針能順利完成。評核團隊點名提到前任潘校長在法團校董會所作出的貢獻。

我曾拜讀校長在家教會通訊和學校網頁上的文章,能深深感受字裏行間所表達的憂患意識。作爲校政掌舵人,校長這顆居安思危之心,令人深表敬佩。它說明校長對將要出現的困難有前瞻性的考慮,對各可行的解決方案已胸有成竹地加以評估。文章中指出時下被寵壞年青人普遍存在的問題,並引用典型及常見的現象,例如:他們成熟的外表掩飾不了幼稚的腦袋丶他們追求娱樂但不會培養興趣丶他們回答任何問題都用上同一答案:不知道丶他們不事學習,不願成長,能忍受孤單寂寞但面對困難時畏縮。他們這些個性對嚴格的學習要求是不相容的丶是格格不入的,亦做成教學上的事倍功半。文章亦提到新學制帶來的憂慮,引用校長的説話:…翻天覆地的變革,成功與否實未可料。校長亦提出三大難題:新學制沒有像中五會考的中途篩選機制使能力稍遜的同學可轉讀較適合的課程 <在國內,這個篩選機制更早啟動,國內上高中是要經公開考試選拔的,考不上的可選擇就讀於實務的、能學習一技之長的職業高中。>;新學制要求的必修科丶選修科和校本評核必定會突顯學生的學習差異及增加學習壓力;最后,新學制下所考取成績的認授性仍存在很多不確定因素,令入讀海外或本地大學的競爭較以前激烈。




處於新舊交替的轉捩點,我會套用<雙城記>的名句:這是最好的時代丶這是最壞的時代,來説明高考時代的結束及文慿試新紀元的掘起。文慿試新學制的出現令同學擔心自己的前途,新學制各方面都超出同學們所能掌握的。鄧顯中學三十週年校慶的口號是<三十而立,承傳創新>,新學制的出現恰恰給承傳製造契機。舊學制而新學制無疑是一個承傳,潘校長而劉校長也是一個承傳,對辦學團體,對鄧顯中學,對劉校長及全體老師來説,都在迎接一個因承傳而開創的最好的時代。前任潘校長由創校開始辛勤工作至退休,他披星帶月,夙夜匪懈,躹躬盡悴才能築起一個堅固的地基讓鄧顯中學訖立其上。雖然珠玉在前,我們相信劉校長絕對有能力藉新學制為鄧顯中學帶來創新。

校慶綜藝晚會當晚,驚喜一個接一個。石老師的鋼琴自彈自唱瘋魔了全場粉絲,呼喊及安歌之聲不絕於耳。石老師的魅力直迫當年的學生王子鄧光榮。當大家還在讚嘆石老師的甜美歌聲時,晚會司儀介紹署理校監出場,又是另一個意料之外,湯修齊校監的獻唱激起夜空的另一亮點。湯校監載歌載舞,施展混身解數,與現埸家長和學生打成一片。湯校監當晚的演出,令人看到的是湯校監的胸襟和氣量。

最后,謹在此祝願<鄧顯人>比别人看得更遠,正因他們站在母校的肩上眺望,母校是所有<鄧顯人>心中的巨人!




敬賀
壬辰年 吉日





















2011年9月16日 星期五

香港粥食及食粥文化的特色

香港粥食及食粥文化的特色

不知道有沒有人曾經替"粥"給出一個定義呢?據說粥已經有數千年的歷史,這個我暫時沒有時間嚴謹考証。但是我在學習中醫方劑學的時候,曾經接觸過一些文章,可以幫助我們對粥出現的年代有所認識。

清熱方劑「白虎湯」中有梗米,與石膏、甘草、知母,加水煮至米熟。雖然作方劑用時要去滓溫服,但那幾味藥也不是那麼"霸道",我想《海皇粥店》可考慮在餐單內加入「白虎粥」一項,以廣招徠!同樣是源出《傷寒論》,醫聖張仲景在指出服用「桂枝湯」的正確方法時,曾提及稀粥。我相信這能粗略說明在東漢時代已經有粥了,張醫聖距今也近壹千八佰年呢!

難道粥經歷了千佰年!並沒有太大的改變 : 有米、有水、任意加上配料。但粥所以稱為粥就是它保留大比例的水份,是流質,雖然有固體的配料在內。

香港居民大部份都是南方人,似乎南方人對粥食十分響往及有研究,故香港的粥食文化非常流行,亦得絕大多數居民支持。在香港!談粥不提「潮洲粥」,算你內容有多麼吸引,也只是管中窺豹,必流於片面。 「潮洲粥」已成為專有名詞,因為未曾有人提過「客家粥」、「東莞粥」之類。考其原因,相信潮汕一帶是唯一以粥為主食的地方。因為粥是潮洲人的主食,故此一定要夠飽肚,粒粒分明、份量十足。所以「潮洲粥」有一個特色,即是多米少水似泡飯,所以肚餓最好吃「潮洲粥」。 「潮洲粥」可以那麼特別及可以在人們的認知中佔一席位,相信與潮洲人五花八門、種類眾多的佐粥小食不無關係。大家可能對那些「咸酸菜」、「咸炸花生」、「咸欖角」、「炒麻葉」、「蒸大眼雞」等等並不陌生,更可能愛不釋手。 「蠔仔粥」亦是潮洲菜的經典美食。在香港也很受大眾追捧。「蠔仔粥」有引人入勝的豐富內容 : 採用大地魚、豬骨、雞、大豆芽及胡椒粒作為湯底,再加入白飯、蠔仔、冬菇絲、肉碎、蝦米、冬菜、蔥等材料。

「艇仔粥」和「及第粥」相信香港無人不識,香港人近來喜歡談'集體回憶',在香港長大的,「艇仔粥」和「及第粥」肯定是我們的'集體回憶'。任何賣粥的地方,都一定有「艇仔粥」和「及第粥」。

「及第粥」的名字由來,相傳與明代廣東才子倫文敘有關,倫氏幼時家中貧困,以賣菜為生。隔壁粥販可憐其年幼,並愛惜他的才學,每天中午以買菜為名,着倫文敘送一擔菜至粥販家,送完菜後,粥販便以豬肉丸、豬粉腸、豬肝生滾的粥招待倫文敘,作為午餐。後來倫氏高中,心念粥販贈粥之恩,重回故地吃了一碗當年老闆給他煮的那種粥。由於此粥無名,倫氏為其題名「及第」,並書一匾。「及第粥」之名,便由之傳遍廣州。

談及「艇仔粥」之前,我們必須說一說舊時廣州西郊。西郊河道兩旁遍植荔枝樹,叫做荔枝灣,每逢夏日黃昏,不乏文人雅士及各方游客來此游玩,游河小艇穿梭往來。其中有小艇專門供應「艇仔粥」。如果岸上或另一艇上游客需要,粥艇上主人便一碗一碗地把粥品遞賣過去,此品集多種原料之長,多而不雜,爽脆軟滑,鮮甜香美,適合眾人口味,很受歡迎。 漸漸地﹐連陸上的小食店也出售這種叫做荔灣「艇仔粥」的粥品了。 「艇仔粥」以新鮮的河蝦或魚片作配料,後來還增加了海蜇、炒花生仁、豬皮、蔥花、姜等,吃前當即煮粥滾制,芳香扑鼻,熱氣騰騰,十分鮮甜。

我們所知的「蠔仔粥」、「艇仔粥」和「及第粥」,大多數是商品形式出售。相信很小港人會在家中煮粥作為主食,當然潮洲人除外。但很多時自己會動手煮粥的原因是與疾病拉上關係的,有時是身體因病未可進食較難消化食物而煮粥佐食;有時是相信食療效果而親手炮製有補益療效的「藥粥」,因為在香港「藥粥」這觀念並不普及,故還沒有將之商品化。 雖然「藥粥」遠至宋代已有提及,但清代是「藥粥」發展迅速的年代;黃雲鵠所著的《粥譜》一書使「藥粥」療法系統專著問世。

我相信發展「藥粥」這門生意,在香港是樂觀的,並應把握中醫取得法定認可地位這個好機遇,為之其未有也,前途無可限量。說不定可解決剛畢業中醫的就業問題呢 !

『附上一則與粥有關的新聞作結束 :

腹瀉整月吃粥 女嬰缺鉀險死 (明報) 12月 12日 星期二

【明報專訊】冬天是腸胃炎爆發的高峰期,很多人遇上腹瀉也會改吃白粥「清清腸胃」,但醫生警告,幼兒因腹瀉而停飲奶淨吃白粥,隨時會引致營養不良,使腸壁細胞萎縮而加劇大便稀爛的情,廣華醫院便接收過一名十一個月大女嬰,連續腹瀉壹個月都只吃白粥,大便愈見稀爛,其後更因為營養不足缺乏鉀質,令四肢無力及背部彎曲不能站立,須接受深切治療救回性命。驗血顯示,女嬰的鉀濃度只有2.3mmol/L,較正常的3.6至5.1mmol/L低,營養師評估,她入院前每日吃白粥只能攝取到30毫克鉀,相當於標準值的4.3%,熱量和蛋白質的攝取量也只是正常的一半。但導致她足足肚瀉了壹個月的原因,並非此病毒性腸胃炎,而是因長期只吃白粥,令身體缺乏營養,導致腸壁細胞萎縮,直接減弱其吸收功能,令大便稀爛更嚴重。』

日期 : 二零零七年一月二十日

2010年6月18日 星期五

Hydrogen Molecule - A computer study

Abstract

The purpose of this project was to obtain the energy at ground state of a Hydrogen molecule by computer. This was achieved by solving numerically by computer programs the time-independent Schrodinger equation for a Hydrogen molecule.

This included the building-up of the equation, mathematical manipulation on the equation for purposes of separation of variables and appropriate substitution, formation of matrix eigenvalue system by application of finite difference method and design of algorithm and programs for solving numerically the matrix eigenvalue system to obtain the eigenvalue with the minimum absolute magnitude - the required energy.

The time-independent Schrodinger equation in both polar and cylindrical co-ordinate were considered in this project. This project first dealt with less complicated case having similar nature and proceeded step by step to achieve the final objective. Therefore this project totally studied four cases and they were in the following order :

the simple Hydrogen atom (H),
the Hydrogen molecule ion (H2+),
the Helium atom (He) and finally
the Hydrogen molecule (H2).

Iteration method was employed for solving the matrix eigenvalue system and programs were written in Pascal language to implement the iteration method algorithm together with the technique of performing matrix shift.

The Borland Turbo Pascal version 7.0 (for DOS) compiler was used for programming. The MS Excel version 5.0 was used for graph plotting. Desktop PC computers with configuration of DX4-100 and Pentium-75 having 16 Megabytes memory were used to execute the programs.


All the numerical results produced by programs were expressed in Atomic Units for the purpose of comparison with accepted and known data. The project had also considered the accuracy of numerical storage in computer memory with reference to the compiler used and the accuracy of numerical computation as a result of very large number of iteration.

The value of "pi", correct to 40 decimal places, was used as a reference value.

The matrix formed as a result of application of finite difference method was very large and this posed a practical problem as to both the length of computation time by programs and the computer memory available. The order of magnitude involved in the length of computation time was one of hours and even days. The memory available had restricted the maximum size of the column vector in the iteration method and therefore the maximum number of divisions in the finite difference method. These two factors had eventually restricted the algorithms available for the implementation of the iteration method. The best was then to have all matrix operations performed row by row. The maximum size of the column vector achieved in this project was one of 15876, a grid size of 128 points by 128 points for two variables and only 13 points for four variables, as in the case of Hydrogen molecule.

The constraint in memory was actually a problem with the compiler, it only addressed the conventional 640 Kilobytes memory in every computer system irrespective of any extended or expanded memory available for the computer system.

The project had also explored the possibility and practicality of using the technique of RAM-disk to circumvent this memory pitfall. All programs written in this project could be modified easily to use the RAM-disk technique.



This project had achieved the following :-

(a) had calculated the ground state energy, the energy for five excited states of Hydrogen atom and had used the same set of programs, by changing the electrostatic charge Z, calculated the ground state energy for He+ ion, Li+2 ion and Be+3 ion, the results were quite good;

(b) had calculated the binding energy and inter-nucleus distance of the Hydrogen molecule ion, the result was rather good too;

(c) had calculated the ground state energy of Helium atom and had tried to do the excited state which could only give an idea of order of magnitude, however, had used the same set of programs to estimate the ground state energy for Li+1 ion and Be+2 ion, and with the result obtained in (a) above, also gave a fairly good estimation to the ionization energy of Helium atom and these two ions;

(d) had calculated the ground state energy and inter-nucleus distance of Hydrogen molecule, but the result could only be described as satisfactorily good;

(e) had studied the algebraic solution of tridiagonal matrix in the Hydrogen atom case.

2010年6月17日 星期四

Solution of Travelling Salesman Problem (TSP) by Genetic Algorithm (GA)

Project Title

Solution of Travelling Salesman Problem (TSP) by Genetic Algorithm (GA)

(10 May 1999)

Introduction

The Problem

The TSP is a classical graph-theoretical problem. It can be described by the following statement :- Given a certain number of cities on a 2-dimensional grid, the TSP is to find a route, starting from and ending at the same city, of visiting each of the cities just once, which minimizes the sum of the Euclidean distances between adjacent cities.

Solution of the TSP by non-GA Approach

Obviously, there exists an optimal solution for the TSP due to the fact that a minimum for the total Euclidean distance for all the given cities exists in theory. There are many methods for the computation of such a total distance, for example, one can simply calculate the distances between any two cities and work out the total distances of each and every possible permutation of all the given cities. Though this is a possible algorithm for solving the TSP from first sight, there is no way to guarantee a solution in polynomial time. In fact, the TSP is a NPC (Non-deterministic Polynomial-time Complete) problem which in short means that it is unsolvable with a standard linear algorithm if the problem’s complexity is large enough. The method just mentioned is actually a linear algorithm and it requires that the computation time is directly proportional to the factorial of the number of the given cities. This method fails even when the number of cities is as small as 10. In order to illustrate the weakness of some conventional algorithms in solving the TSP, this project will demonstrate a ‘Low Weight Hamiltonian Cycle (LWHC)’ algorithm mentioned in standard textbooks for graphs and networks. The LWHC algorithm will also serve as a control algorithm for the assessment of the GA for program quality and effectiveness. This project had also considered the Nearest Neighbor Heuristic algorithm (NNH), which had adopted the 2-optimal techniques to obtain a better solution.





The LWHC & NNH Algorithms

This is a standard textbook algorithm for solving the TSP. The algorithm is to start from a particular city and find a second city, which is nearest in terms of distance to the first city. By the same process, another city is again located in the same manner, i.e. the city which is nearest to both of the previous two cities. This process is repeated until all the cities are handled. This LWHC algorithm does not guarantee an optimal solution though it is efficient to give a solution. Whenever the first city to start with is the same one, the algorithm will without exception return the same solution. Therefore it is ‘first-city’ dependent. This means that it may return at most the number of different solutions as the number of given cities but no more. It is obvious that these different solutions, significantly smaller than the factorial of the number of given cities, do not necessarily contain the optimal one. The study and theory of LWHC algorithm proved that the upper bound for the solution is twice the optimal value. The computation time for LWHC algorithm is directly proportional to the cubic of the number of the given cities. The NNH at first builds its distance matrix from the coordinates of the nodes concerned and searches the matrix for the shortest possible distance from a node to another. Therefore the most time-consuming part of the NNH algorithm is the building up of the distance matrix. It has the complexity of power 2 of the number of nodes concerned. The NNH is faster than the LWHC : to compute the 100-city TSP, the computation time of LWHC is in the area of minutes while NNH completes the searching within seconds. The solution of NNH with 2-optimal gives 106.30 and LWHC gives 115.02.

The Objective of the Project

This project will create a MatLab program consisting of modular M files, which is designed to find an acceptable solution for the TSP and employs the Genetic Algorithm to arrive at the solution.





The Software – MatLab for Windows

This software is matrix and vector orientated, which is suitable for handling numerical data expressing in the form of matrix and vector. In this project, the cities are labeled by natural numbers and the routes are conveniently expressed in row vector format. Graphical interface, which is easily put into codes, is another powerful features of this software. Visually, the solution can be depicted graphically, which not only gives a graph of the route itself but also gives a basis for program improvement by observing the transition of routes during the whole process of program execution. It is true that some improvement achieved in this project is in fact a result of observation and analysis of the graphs of the routes.

The Genetic Algorithm

What is a GA

The GA can be described as a stochastic search technique for an optimal solution of a problem, which can be modeled in accordance with the requirement of GA. The GA is a simulation of the process of evolution in nature. Generally, all the possible solution to a problem forms a space, a point in which is uniquely defined by the independent variables. Each point in the solution space is assigned a value, which is dictated by the problem to be solved or function to be optimized in terms of a particular set of value of the variables. The GA is implemented to search for the optimal solution point in the space. The process of evolution in nature is that the fittest biological species is propagated to the offspring in the next generation by means of sexual reproduction of parents. Mutation is also adopted by nature to achieve a sudden change to the species, which may result in a better species or, equally likely, turns into worse one. However, unlike reproduction, the mutation does not occur frequently. In any event, the ultimate objective of a process of evolution in nature is to let the fittest one survive and to extinguish the less fitted one, eventually. The GA is therefore a computer model, which extracts its “ingredients” from the evolution process. Generally, a GA consists of the following machine process, namely, crossover, mutation, propagation, and fitness evaluation. The measurement of fitness depends on the value assigned to the point as mentioned above. The GA was invented by Mr. John Holland in the early 1970's. According to Holland’s Schemata Theorem, the result of the GA applied to a problem will be a homogeneous population, which has converged on the optimum point in the space being searched.

Parallel Processing of GA

The most powerful feature of GA is its capability of being implemented by parallel processing. However, due to hardware and other constraints of resources, this is not studied and implemented in this project. It is, without diminishing the power of non-parallel GA, therefore as a matter of completeness to mention some point about parallel GA. By implementing parallel GA, the most time-consuming modules can be re-distributed to be processed by a large number of microprocessors and this will both increase the computation time and be capable of handling a population of significant size. However, any distribution of processing will involve some communication overheads, which are not present when the processing is done on one processor.

The Application of GA to TSP

Total Number of City

The coordinates of 100 points to represent all the cities will be generated. This serves as the data set for this project. The x-coordinate and y-coordinate of a particular point is each generated by a separate mathematical equation. Therefore the data set remains the same for each separate execution of program. Each point, therefore each city, is labeled by a natural number from 1 to 100. Of course, the labeling satisfies some simple rule. One hundred points are generated each along the x-axis and y-axis, which makes a total of 100 points then. The city with a label of 1 is at the left lower corner and the labeling moves upward to city 10 at the left upper corner. The city 11 starts again from the bottom and moves upwards in the same manner. Therefore the square grid formed by the xy-axis contains a total of 10 column of 10 points each.

The Solution Space of TSP

To start with a TSP, a certain number of cities, say k (k<=100), will be given and a solution will then be worked out for those cities. The solution space will then consist of all the possible permutation (k!) of the given cities. Therefore each point in the solution space is a permutation of the given city. The value of a point, a measurement of fitness as well, is defined in TSP to be the total distance between all the pair of cities in the permutation. Bearing in mind that the salesman shall return to the starting point, the first and the last city in the permutation forms a pair as well. The definition of ‘fitness’ in project is that the fittest permutation is the permutation having the shortest total distance.

Example : given cities - (4,34,67)
solution space – (4,34,67) (4,67,34) (34,4,67)
(34,67,4) (67,4,34) (67,34,4)

The Implementation of GA

(1) Select (generate) a random number of N points from the solution space and therefore this is a population of N members;
(2) evaluate the value(total distance), fitness, of each of the N members;
(3) rank the members in ascending order of value;
(4) select the first n members as parents (n<=N);
(5) perform crossover, a simulation of sexual reproduction, on the n parents;
(6) a production of 2n offspring as a result of crossover;
(7) select the last p members in the sorted population for the purpose of propagation, i.e. the first p offspring out of the 2n will replace the selected p members (p<=N);
(8) perform mutation on a member randomly selected;
(9) rank the population again;
(10) copy the first member, the fittest member;
(11) perform mutation on the copy;
(12) evaluate the value of the mutated copy;

(13) if the value is better than that of the nth member, replace the nth
member by the mutated copy otherwise perform no replacement;
(14) a new population is then formed and this is termed a new
generation;
(15) return to step(4) and repeat all the process until the pre-assigned
number of generation has reached;
(16) towards the end of the total number of generation, step(11) to
step(13) will be performed for all the cities in the permutation;
(17) the mutation method mentioned in both step(8) and step(11) will be
different for those early generation and latter generation;
(18) the offspring produced in step(6) will be ranked if (2n>p) but not
otherwise.

Implementation of Program Modules

Literature Research

Though the GA had been invented for nearly 30 years, many of the documentation only gave a very brief description of the important parts which a GA should have without going into much details. It even differed a lot among books especially when they handled the actual parameters for the execution of GA programs. It was therefore fair to mention that this project had implemented the GA without borrowing any implementation details from documentation and had managed to make improvement on some of the idea and concept. Passages on the related topic available in the internet were studied as well.

Coding of MatLab Program Modules

The implementation was divided into program modules, each performaning a specific task.




Module for Crossover

The crossover module generates two offspring from two parents. The permutation of each parent is broken into two halves. The first half of parent A is copied to form the first half of the permutation of offspring Ab. The second half of AB is formed by copying from the permutation of parent B those cities, which are not in the first half of Ab, in the same order as they are in parent B. Likewise, the second half of offspring aB is formed by copying the second half of parent B. And the first half of aB is formed by copying from the permutation of parent A those cities, which are not in the second half of aB, in the same order as they are in parent A.

Example : Parent A = (1 2 3 4 5 6 7 8) Parent B = (6 4 3 1 7 2 8 5)
Offspring Ab = (1 2 3 4 6 7 8 5) Offspring aB = (1 3 4 6 7 2 8 5)

In order that the n parents will produce 2n offspring, the crossover (XO) is performed in the following manner :
1st parent XO 2nd parent
2nd parent XO 3rd parent
………………………..
nth parent XO 1st parent

Module for Propagation

This module will replace the last p members from the population by the first p offspring. The population has been ranked before this module applies and the offspring will be ranked as well if (2n>p).

Module for Mutation

This module randomly selects a member from the population for the performance of mutation. Mutation is done by simply interchanging two cities in the permutation. The actual locations are dependent on the number of generation reached. At the earlier stage of the program execution when the number of generation is still far away from the maximum number of generation to be performed, the interchange is performed on cities across the boundary of a permutation identified at the time of crossover operation. However, when the program execution is towards the end, the interchange is performed on cities just next to each other or between cities, which have one city in between. This may be described as a mutation with variant offset. The first city in the permutation is randomly selected for the exchange. Conditional mutation is also performed on a copy of the fittest member in the population. If the mutation gives a permutation, which is better than the nth member in the population, then the nth member is replaced by the mutated copy, otherwise discard the mutated copy and the population receives no change at all. This conditional mutation is also with variant offset. The conditional mutation starts at a randomly selected city in the permutation. However, this conditional mutation is performed on each city in the permutation in turn when the program execution is towards the end.

Module for Evaluation of Fitness

This module simply calculates the total distances of every pair of city in the permutation. The first and the last member constitute a pair as well. The fitness of a member is inversely proportional to the distance. This module occupies much of the computer time during the execution of the program.

Module for Ranking and Sorting

This module simply arranges either the members in the population or the offspring in an ascending order in distance. This ranking is important for the purpose of selection of offspring and members for propagation.

Module for Generating a Population

This module simply generates a random N members and this serves as the population. This in fact is part of the solution space of the TSP for the given k cities.



Difficulties Encountered

At the initial execution of the early version of the program, the program is designed to stop execution either when the maximum number of generation has reached or all the parents are identical. Under this condition, the program usually stops execution after roughly 4 generations. At this stage, the parameters are selected in such a manner that both the number of parents and size of the population were small in magnitude, say for example, parents are between 3-8 and the population size is around 30-50. This is the figure suggested by one of the reference books. The early version of the propagation module simply duplicates the offspring to form the new population of the same size in accordance with the percentage of the fitness of individual offspring, i.e. better the fitness, more occupancy in the new population - the best offspring may appear more than once. The fact that the program accepts small number of parents and allows the best offspring to appear more than once in the new population makes the stop very soon from start or makes the program to converge quickly to an unsatisfactory solution. At the early stage of the project, it has been accepted as a fact that it is desirable to perform mutation on the worst member or at least on a bad member in order that the mutation may result in a better member. There is no conditional mutation and mutation with variant offset at the early stage of the implementation. The test run of the early version of the program does not give satisfactory results. Attempt has been made to use the LWHC module to find a better permutation to start with, which is made one of member of the initial population, with a view to giving better execution result. However, the result does not differ too much. The LWHC module has been used to act as a mutation operator to replace the worse member in the population by the permutation found by the LWHC module. However, the program converges very quickly to the value dictated by the LWHC module. The method of refinement is used a well hoping for a better result but it does not produce any significant improvement in the program execution. The method retains the result of a program execution and returns it to the initial population of a subsequent fresh execution. The idea is that this will allow the initial population to start with a better member, which may produce better offspring and propagate to next generation. It also does not produce significant improvement. A crossover module of retaining the best parent and made it one of the parents in all of the crossover process had been studied and tested, however, this would only direct the program execution to converge very quickly to a particular value. This was attributed to the fact that half of the offspring so generated by having the best parent retained in each and every crossover process contained the same first half permutation as that in the 1st parent. Therefore the variety of the permutation had decreased. This had therefore limited the scope of search of the solution space.

Improvement Made and Techniques Employed

Though the early version of the program was not satisfactory, it really gave insight and background for improvement, especially when the best permutation obtained at the end of each generation was depicted graphically. From an analysis of the graphs of route, the following conclusion was reached, which served as a further basis for improvement of the program and the implementation as a whole :-

(1) a large size of initial population was always desirable for better result;
(2) a large size of better parents would generate better offspring for propagation;
(3) the graph indicated that at the early stage of program execution, it was relatively more likely that cities farther apart were joined but the situation was reversed at the latter stage of program execution, i.e. cities nearer to each other were joined;
(4) the implementation of mutation with variant offset was devised to handle this observation : the mutation module interchanged cities farther apart at first, and after some generation later, the same module switched to swap cities nearer to each other;
(5) towards the end of program execution, it was very easy to simply adhere to a particular value of fitness and it appeared that the program execution tended to converge to this value. This value would remain the best among the members for very many generation. From the observation of the graphs, most of the cities were properly joined and only some number of cities nearer to each other remained improperly joined;
(6) observation in (5) suggested that it would be relatively likely to generate a even better permutation from this already best member when the cities nearer to each other were interchanged. This is the rationale of introducing the module for conditional mutation and it was also the reason why the module applied only to interchange cities at most at an offset of 2 away from each other in the permutation;
(7) the conditional mutation would result, if there was a mutation then, in replacing the nth parent. The reason was two-folded : the nth parent was the worst of the parents and the replacement nth parent would be acted upon by the crossover module to produce offspring with the 1st parent, i.e. the best parent, this further process might produce even better offspring;
(8) the method of crossover, which had each parent participated twice, was found to have generated relatively better offspring with a great spread of variety of permutation.

The finalized version of the program and the program modules had adopted all the above improvement and techniques.

The List of the Various Modules

MODULE FUNCTION PARAMETER

DSPP.m Display the 100 cities marked by ‘*’ Number of points
DWPTH.m Draw the route Title,Where to draw
GA.m Main module grouping other modules
GANHC.m Execute GA & LWHC for same cities Number of total execution
GENP.m Generate the label of cities for TSP
GETP.m User to enter cities for TSP City labels
GETXY.m Generation of xy-coordinates of a city
LWHC.m Low weight hamiltonian cycle module
MUTAT.m Mutation with variant offset
PL.m Evaluation – length of route City labels (row vector)
RMPTH.m Generation of random routes
RNKPTH.m Sort the routes in ascending order Vectors of city labels
RPN.m Propagation and formation of population
SCAT.m Add two strings to form a single string Two strings
SWAP.m Conditional mutation
SWAPALL.m Conditional mutation, to every city
VALIDATE.m Validation of the program Parameters in modules
XOV.m Crossover of parents and offspring

Validation of Program by Solving 19-city TSP

Control Data and Specific Pattern of City

In order to assess the validity of the program, a particular pattern of cities were selected for this purpose. The cities were selected on the basis that it was very easily to work out the optimal path and therefore the total distance simply by visual inspection. The LWHC module would act on the same set of cities to give some idea as to how good the program has been up to. 19 cities were chosen for preliminary test runs. The cities were roughly along the edges of a rectangle and the optimal total distance would then be simply the perimeter of the rectangle. The chosen 19 cities were (1,11,21,31,41,51,53,55,57,59,60,50,40,30,20,10,8,7,3). The optimal total distance for a round trip was about 28.73 and the LWHC module gave a solution of about 44.9, as expected only in a fraction of second.



Execution Result (Annexure A-Case 1 & 2)

The 19-city TSP was solved by a 800-population execution for 200 generations. The parents were 49.9% of the population. Though the execution of 200 generations on a P6-166 64M computer took about 4 hours to complete, the execution had already converged to the optimal solution of 28.73 since the 83rd generation.

The same 19-city TSP was executed again with the same parameters on a Pentium-233 96M computer. It took 2.5 hours to get the optimal solution. However, it had converged to the solution since the 152nd generation.

Conclusion in Respect of Program Validity

Therefore the validity of the program was confirmed by the solution of the 19-city TSP.

Solution of a 12-city TSP

The program was executed for a 12-city TSP, the optimal solution of which was not known beforehand. The cities were (34 36 38 40 42 44 46 48 50 52 54 56). The LWHC module gave a solution of 20.78.
The result of execution was summarized in the table below :-

Generation Population Parent Result Remark

50 150 74 20.55 21.56 appeared for 30 generations since the 13th
50 250 124 20.14 20.14 appeared for 6 generations since the 45th
150 100 49 20.14 20.14 appeared for 134 generations since the 17th
300 50 24 20.57 20.57 appeared for 117 generations since the 184th
100 300 149 20.09 20.09 appeared for 38 generations since the 62nd
20 800 399 20.09 20.09 appeared for 11 generations since the 10th


From the result of the six executions, we could confidently conclude that it was very probably that the optimal solution for the 12-city TSP was 20.09.

Further Work

Further execution of the program on 28-city, 45-city and 100-city TSPs was attempted. They were : (a) 28 cities (1 11 21 31 41 51 61 71 81 91 93 95 97 99 100 90 80 70 60 50 40 30 20 10 9 7 5 3) with a optimum distance of 38.17 and a LWHC solution of around 64.76. (b) 45 cities (from city 23 to city 67) with a LWHC solution of around 49.95, and (c) 100 cities (from city 1 to city 100) with a LWHC solution of around 113.83. The increase of the number of given cities would no doubt significantly increase the computer execution time. No optimal solutions were obtained. Mr. Goldberg had shown that for optimal results population size must increase exponentially with the number of given cities. In order to give some idea as to the inter-relation among the parameters, the following figures were quoted from [8] : (a) 50-city TSP – parallel processing by 18 computers to have the optimal result in 400 seconds with a population size of 9216 for 479232 generations, (b) 100-city TSP – parallel processing by 18 computers to have the optimal result in 47 minutes 18 seconds with a population size of 18432 for 2211840 generations, (c) 200-city TSP – parallel processing by 18 computers to have the optimal result in 3 hours 39 minutes with a population size of 18432 for 7372800 generations, and (d) 532-city TSP – parallel processing by 18 computers to have the optimal result in 27 hours 26 minutes with a population size of 18432 for 18432000 generations.

Result of Execution

Some of the execution result for further work on 28-city, 45-city and 100-city TSPs was depicted in Annexure B.

Conclusion

The LWHC module might be used as a control algorithm to give some rough idea as to the order of magnitude of the optimal solution. Small population with large generation might easily go into local minimum but could give some insight as to the solution space. Observation from this type of execution might assist in the setting of various parameters. Large population with small generation might not be sufficiently close to the optimal solution though better result would be relatively likely. Large population with large generation would be expected for the optimal result. The program was designed in such a way that the execution could be done at stages for a review of the process of the execution before a decision to continue with further execution. Though LWHC & NNH were relatively efficient algorithms to arrive at a solution with a moderate degree of good quality, it had no way to guarantee an optimal solution and in fact LWHC & NNH would rarely give such a solution. On the other hand, GA was capable of obtaining an optimal solution of course at the expenses of computer execution time. This project has already demonstrated that GA could be easily coded and it was capable of solving optimization problem. It was only a matter of computer hardware and computational time to put the GA into solving practical problem. The capability of GA in parallel processing would tremendously reduce the computer execution time and make a very practical tool. The complexity of GA was roughly the product of population size and number of generation.



Reference

1. Applications of generalized nets / editor, Krassimir T. Atanassov. Singapore :
World Scientific, c1993.
2. Advances in computational and stochastic optimization, logic programming, and heuristic search : interfaces in computer science and operations research / edited by David L. Woodruff. Boston, Mass. : Kluwer Academic Publishers, c1998.
3. Artificial neural nets and genetic algorithms : proceedings of the international conference in Innsbruck, Austria, 1993 / R.F. Albrecht, C.R. Reeves, amd N.C. Steele (eds.). Wien : Springer-Verlag, c1993.
4. Computational intelligence for optimization / Nirwan Ansari, Edwin Hou.
Boston : Kluwer Academic, c1997.
5. Genetic algorithms + data structures = evolution programs / Zbigniew Michalewicz. Berlin : Springer-Verlag, c1992.
6. The Traveling salesman problem : a guided tour of combinatorial optimization / edited by E.L. Lawler ... [et al.]. Chichester : Wiley, c1985.
7. Adaptive computing : mathematical and physical methods for complex environments : 4-5 August 1996, Denver, Colorado / H. John Caulfield, Su-Shing Chen, chairs/editors ; sponsored ... by SPIE--The International Society for Optical Engineering. Bellingham, Wa. : SPIE, c1996.
8. Parallel computation : based on the proceedings of a conference on parallel computation / organized by the Institute of Mathematics and Its Applications and held at St. Catherine's College, Oxford, in September 1991 ; edited by A.E. Fincham and B. Ford. Oxford : Clarendon Press, c1993.
9. Proceedings of the Seventh International Conference on Genetic Algorithms : Michigan State University, East Lansing, MI, July 19-23, 1997 / editor/program chair, Thomas Back ; supported by Office of Naval Research ... [et al.]. San Francisco, Calif. : M. Kaufmann, c1997.
10. Second International Conference on Genetic Algorithms in Engineering Systems : Innovations and Applications, 2-4 September 1997, venue, University of Strathclyde, Glasgow, UK. London : Institution of Electrical Engineers, c1997.
11. Applied and Algorithmic Graph Theory : edited by Gary Chartrand & O.R. Oellermann, Mcgraw-Hill International Editions.
12. http://www.acc.umu.se/~top/travel.html.
13. http://inf.cs.nthu.edu.tw/resources/matlab.html.
14. http://garage.cps.msu.edu/papers/papers-index.html.
15. http://www.aic.nrl.navy.mil/galist/.

Annexure

A. 19-City TSP-Optimal Solution

Case 1
generation=200 parent=399 population=800
replacement factor=1.00 mutation factor=1.00

71.90 67.57 66.85 62.50 61.22 60.36 52.76 52.76 52.76 52.76 50.12 50.12 50.12 50.12 50.12 50.12 50.12 50.12 50.12 48.30 44.99 44.99 44.99 44.99 44.99 41.32 41.32 39.35 37.42 37.42 35.44 35.44 35.44 35.44 35.44 35.44 35.44 30.06 30.06 30.06 30.06 30.06 30.06 30.06 30.06 30.06 30.06 30.06x38 28.73x115

Optimal Path = [11 21 31 41 51 53 55 57 59 60 50 40 30 20 1 8 7 3 1]

Case 2

generation=200 parent=399 population=800
replacement factor=1.00 mutation factor=1.00

73.00 64.05 59.80 57.75 58.50 56.45 53.28 51.05 54.43 49.95 49.95 49.95 47.52 46.63 42.84 43.90 45.44 45.66 41.82 42.65 44.31 44.31 43.67 44.31 43.67x11 42.79 43.67x6 38.51x63 37.77x7 37.76 35.95 34.62x8 33.39x15 31.42x6 30.95x5 29.53x3 28.73x49

Optimal Path = [57 59 60 50 40 30 20 10 8 7 3 1 11 21 31 41 51 53 55]





B. 28-City TSP

Parameters ===> gn=300 pnt=99 pop=200 rrp=0.99 pmt=1.00
Best distance obtained ===> 50.03 (1.5 hours)
The path returned by program ===> 61 51 41 31 21 11 1 3 5 7 9 10 20 30 90 100 40 50 60 70 80 99 97 95 93 91 71 81

Parameters ===> gn=300 pnt=399 pop=800 rrp=0.99 pmt=1.00
Best distance obtained ===> 53.93 (14.5 hours)
The path returned by program ===> 93 91 71 51 61 81 95 97 100 90 80 99 70 60 50 40 30 20 10 9 7 5 3 31 21 11 1 41

Parameters ===> gn=500 pnt=124 pop=250 rrp=0.99 pmt=1.00
Best distance obtained ===> 52.07 (5 hours)
The path returned by program ===> 50 97 91 93 95 81 71 61 51 41 31 21 11 1 3 5 7 9 10 20 30 40 60 80 99 100 90 70

Parameters ===> gn=300 pnt=249 pop=500 rrp=0.99 pmt=1.00
Best distance obtained ===> 56.73 (4.5 hours)
The path returned by program ====> 50 60 70 80 90 100 99 97 95 93 91 81 71 61 51 31 7 9 41 21 11 1 3 5 10 20 30 40

45-City TSP
Parameters ===> gn= 900 pnt=249 pop=500 rrp=0.99
Best distance obtained ===> 52.33 (24 hours)
The path obtained by program ===> 23 24 25 35 56 65 66 67 58 48 38 37 26 27 28 39 49 59 60 50 40 30 29 47 57 46 36 45 55 54 53 52 41 31 32 43 34 44 64 63 62 61 51 42 33







100-City TSP

gn=150 pnt=499 pop=1000 rrp=1.00 pmt=1.00
85 76 56 60 100 97 6 9 19 8 63 74 91 93 99 67 79 75 83 96 72 71 61 43 45 29 59 57 34 31 11 12 7 25 73 62 52 4 1 24 87 16 5 15 32 53 77 84 65 55 44 35 37 47 86 80 89 50 30 40 68 3 2 46 95 66 39 90 69 48 58 78 64 42 41 17 18 20 98 88 49 38 28 26 23 22 13 36 27 70 92 94 21 14 10 33 51 81 82 54 distance = 317.66

gn=300 pnt=49 pop=100 rrp=1.00 pmt=1.00
5 7 69 80 30 60 70 68 97 64 54 14 19 86 87 35 4 23 46 36 24 2 1 22 41 53 74 44 26 47 10 39 48 49 40 29 18 61 62 66 77 99 98 96 93 83 82 92 55 57 84 94 72 73 65 56 95 11 3 45 79 78 51 34 25 12 21 32 42 15 16 33 31 13 27 50 59 38 6 37 100 88 75 91 67 58 76 85 81 71 63 52 43 89 90 28 20 9 8 17 distance = 284.49

gn=500 pnt=99 pop=200 rrp=1.00 pmt=1.00
44 66 52 72 91 70 69 35 34 12 13 32 51 81 64 55 28 29 20 10 49 47 24 16 79 89 80 90 11 1 21 33 62 41 31 22 2 14 42 73 83 76 68 38 30 39 17 27 7 4 3 26 37 48 60 100 75 43 36 46 56 85 94 86 87 40 50 59 58 18 19 9 8 54 92 93 74 65 77 96 95 71 23 25 53 63 84 97 98 78 88 99 6 5 45 61 82 67 57 15 distance = 265.67













C. The Program Listings – Modules

function [a,l,d,rankpath,nng]=GA(generation,pnt,pth,prp,rkp,ng,dmat)
[rr,ss]=size(rkp);nng=ng;path=pth;parent=pnt;
shusernode=[1];% shusernode=[1 11 21 31 41 51 61 71 81 91 93 95 97 99 100 90 80 70 60 50 40 30 20 10 9 7 5 3];sl=PL(shusernode,dmat);
% usernode=GETP;usernode=GENP(1,100,1,1);% usernode=[1 11 21 31 41 51 61 71 81 91 93 95 97 99 100 90 80 70 60 50 40 30 20 10 9 7 5 3];
[ee,ff]=size(usernode);pm=1;N=0;
swl=floor(0.6*generation); mutate=floor(1000*rand)+1;
if ((ss==1)&(rr==1)) randompath=RMPTH(usernode,path); [randompath,dist]=RNKPTH(randompath,dmat); rankpath=randompath(1:parent,:); path=parent; parent=floor(parent*prp/2);else rankpath=rkp; dist=PL(rankpath(1,:),dmat);end
if ((parent*2) > floor(path*prp)) sort=1; fprintf(1,'Offspring - Sorting !!!!\n');else sort=0; fprintf(1,'Offspring - No Sorting !!!!!\n');end



while (N %6.2f\n',sl); fprintf(1,'Initial => %6.2f\n',dist(1));end
if (N>0) zz=num2str(dist(1)); xx=num2str(N+nng); zzz=SCAT('GA => ',zz); xxx=SCAT(zzz,' of G'); xx1=SCAT(xxx,xx); yy=rankpath(1,:); if (N==1) dummy=DWPTH(xx1,yy,1,2,0); end if (N>1) dummy=DWPTH(xx1,yy,1,2,1); dummy=DWPTH(SCAT('Previous GA => ',num2str(d(N))),pmut(N-1,:),1,1,1); end pause(0.001);
fprintf(1,'G %3.0f => %6.2f\n',N+nng,dist(1)); end
[offspr,doff]=XOV(rankpath,parent,sort,dmat);newpath=RPN(offspr,rankpath,prp);
N=N+1;d(N)=dist(1,1);
check=floor(pm*1000)+1;if (check>mutate) randompath=MUTAT(newpath,N,generation);else randompath=newpath;end
[rankpath,dist]=RNKPTH(randompath,dmat);if (Npmut(N,:)=rankpath(1,:);
end % end-while
fprintf(1,'G %3.0f => %6.2f\n',N+nng,dist(1)); a=rankpath(1,:);l=dist(1);nng=nng+N;qq=num2str(l);qqq=SCAT('GA => ',qq);tt=num2str(ff);ttt=SCAT('Selected Points = ',tt);dummy=DWPTH(SCAT('Previous GA => ',num2str(d(N))),pmut(N,:),1,1,1);dummy=DWPTH(qqq,a,1,4,2);dummy=DWPTH(ttt,usernode,0,3,2);












********* End of Report *********

复方汤剂煎煮法与疗效关系研究进展– 撰写综述

课程名称 : 中医全科学士 (BTCM)



日期 : 2007年11月30日


关键词 汤剂煎煮 疗效 有效成分 先煎后下 高压煎煮

序言

中药复方汤剂是中医临床应用最广泛的剂型。以水为溶媒与药物共置陶瓷质容器内用直火加热至沸腾,再经一段时间煎煮,然后去渣取药液口服,是常见处理汤剂的过程。药理学证明药液中的药物有效成分是疗效好坏的根本。任何影响药物中有效成分水溶性的因素都直接关系着该复方的疗效。故煎煮方法不容置疑地左右着疗效。任何讨论汤剂煎煮方法的文章都涉及煎煮器具、药物浸泡、煎煮时间火候、用水量、煎出量、煎煮次数及特殊药物的处理方法包括先煎、后下、冲服、代水煮等等。但从药物中有效成分化学性质方面去重新思考煎煮方法、针对个别药物的特有性貭所提出的先煎后下的煎煮方法及用水量煎出量配合火候的定量研究,都促使我们在一个较科学及定量的层面去了解煎煮方法及疗效的必然关系。

正文

1. 中药复方涉及不同药物的配伍。实验证明,群药合煎与个别药物单煎的合并液所含的化学成分往往有差异,疗效也不完全相同。药物配伍会对某一有效成分的溶解度有影响,例如,多糖可使甙类、酚类、甙元增溶或助溶[8] 。 群药合煎可使成分增溶而增效、成分挥发或生沉淀而减效,或降低某些药物的毒副作用、产生新的化合物[2]。例如[2],在<当归承气汤>中加大当归用量能提高汤液中磷脂含量,致使大黄总蒽醌的溶出率亦随之增大。葛根淀粉可使芦丁的水中溶解度增加近4倍;苍朮可使游离麻黄碱充分溶解;甘草可助石膏中硫酸钙在汤液中的溶解程度;牡蛎与柴胡同煎能提高汤液的碱性度而防止柴胡皂甙的分解令柴胡有效成分煎出率增大[8]。

2. 复方煎煮过程中亦会产生新的疗效,麻黄汤内桂枝的挥发油成分桂醛与麻黄中的麻黄碱起反应而生成一种新的及具有生理活性的物质。附子与干姜、甘草同煎,其强心作用明显持久但毒性却减少近4倍[8]。 可见复方在正确的配伍下能利用药物之间的化学反应来增加有效成分的溶出并藉此提高疗效。 在药物配伍确定的大前提下,煎煮方法毫无疑问会直接地并主要地影响着这个化学反应,亦因此最终会累及总体疗效。


3. 现代研究证实,药物中有效成分如生物碱盐类、甙类、苦味质、有机酸盐、鞣质、蛋白质、糖、色素、树胶、多糖类、酶和少量挥发油都能被水浸出而溶于水[12]。故以这些为主要成分的药物,一经煎煮,有效成分便迅速溶出。 因此,这类药物的汤剂疗效较好。例如,茵陈、大蓟、商陆、地骨皮、使君子、葛根、杜仲、夏枯草等[8]。

4. 又黄芩、银花、桑白皮、桔皮中的黄酮甙,补骨脂、白芷、独活、泽兰、秦皮中的香豆精甙会随水温升高而增加溶解度[8]。 但大黄、番泻叶、牵牛子的泻下成分,钩藤、臭梧桐的降压成分都属不耐热物质,不能久煎;解表药的挥发油成分亦是如此。

5. 滋补药的有效成分多为氨基酸、生物碱、鞣质、淀粉及蛋白质等,煎煮不到一定时间,有效成分便不能充分溶出而影响疗效;又紫菀止咳成分为紫杜鹃黄酮和甲素及麻黄中的麻黄碱用于平喘时,煎煮时间须稍长[8]。

6. 因科技的发展,目前煎药机的应用相当广泛,但传统的直火煎煮方法所得煎出液的有效成分不逊于煎药机[9]。又传统煎煮汤剂方法亦优胜于煮散及配方颗粒调配等剂型[5]。


7. 但亦有实验研究涉及蒸气加热煎煮法和加压煎煮法,并发现加压煎煮时,由于压力的作用,水份能迅速渗入到组织细胞中从而促使有效成分溶出。另外加压后,锅内温度因而高于常压煎煮,又能增加药物成分在水中的溶解。所以压力和温度的升高更能增强药物的疗效[8]。又用于煎煮的器具要用尺寸比较大的,以利药物于沸腾时不断翻滚,促进药物加速溶出并可避免药液外溢[8]。

8. 有些药物的有效成分较难煎出,故应将其先煎。例如,茯苓必须切薄片先煎才能提高煎出率发挥临床疗效。先煎延胡索才能提高汤剂中生物碱的含量,更好地发挥临床止痛作用。用制首乌亦必须先煎久煎而避免滑肠泻下负面作用。菟丝子煎出效果差,生用要先煎久煎,若用高压煎煮,其煎出效率最佳。苦杏仁通常是去皮尖后入药,但为了提高有效成分煎出率,临用前将苦杏仁打碎先煎即可。其他药物如石斛、鳖甲、珍珠母、赭石、龙骨、牡蛎、石决明、石、石膏、水牛角、龟板、穿山甲等都应先煎才不会造成浪费,而附子、草乌、川乌、细辛需要久煎先煎致使其毒性成分能被水解而减去毒性[10]。

9. 就先煎药物内属于矿石贝壳类的,为了有效地增加其溶解度,可先将药物粉碎后再作先煎安排,而粉碎程度由40目至60目不等[11]。

10. 但有些药物含芳香性挥发油,久煎会使有效成分耗散殆尽或遭到破坏,影响临床疗效,故宜后下。 槟榔、木香、藿香、砂仁、生黄柏、夏枯草、鱼腥草、板蓝根[11]、钩藤、番泻叶、菊花、薄荷、菁蒿、荆芥、沉香、肉桂及大黄生品作泻下用时,都属这类药物[10]。有学者考虑及先煎后下药在二煎时的困难,设想将常用的先煎及后下药物分别加工成浓缩液,并将之密封包装冷藏备用。煎煮时只需将先煎后下药物的浓缩液依先煎后下的次序倒入锅中与其他药物一同煮沸即可[6]。

11. 有的药物对热不稳定,遇热后易失去临床疗效或产生别的不是期望的疗效。 此类药物要研粉吞服或冲服才能发挥疗效,例如雷丸、田七、鸡内金等。 此种服药方法亦适用于洋金花、马钱子等属剧毒药物,可掌握剂量既保证安全用药又能保证临床疗效[6]。 又如茯苓的多糖成分难溶于水,临床上不断增加其用量(至30克)却未使疗效增强,故在汤剂中也宜釆用冲服方法[4]。

12. 有学者经实验企图量化与汤剂煎煮有关联的几个指标[7],即吸蓄量(个别药物吸取及蓄贮水分的程度 - 公式中的r)、蒸发量(经验值为武火每分钟19毫升而文火为9毫升 - 公式中的b)、加水量(放入容器开始煎煮时的水的体积)、火候、煎煮时间及煎取量(公式中的a1或a2)等。由此项实验归纳[7]的经验公式为 :

(1) A=rG+bT+a1 ,及 (2) A2=bT+a2 。
(A 为首煎加水量而A2 为二煎加水量,G为药物总重量及T为煎煮时间)
不同种类药物的吸蓄量(r)是有差别的,经实验测定有如下的经验值 :

(1) 茎、叶、花类如银花、麻黄、桑叶、荆芥等为每克2.35毫升;
(2) 根、根茎类如桔梗、黄岑、柴胡、防风等为每克1.82毫升;
(3) 子实、果皮类如连翘、陈皮、杏仁、栀子等为每克1.98毫升;
(4) 枝、干、皮、藤类如勾藤、桂枝、川朴、黄柏等为每克1.23毫升;
(5) 石、介、虫、甲类如龙骨、牡蛎、生石膏等为每克0.72毫升,

它们的平均值约为每克1.60毫升。 例如,用直火煎煮一剂复方共重82克的八珍汤,要求文火首煎30分钟及二煎20分钟而每煎各取200毫升药液。根据公式得加水量分别为- 首煎 : 1.6X82+9X30+200 = 601(毫升);及二煎 : 9X20+200 = 380(毫升)。但有些药物如竹茹、玉米须、金钱草等剂量大、体积大,会影响其它药物有效成分溶出,应单独先煎20分钟后捞出药渣,留下药液再加入复方中其他诸药同煮,这过程称为代水煮[18]。 在这种情况下,我们便要将上述的加水量作适当调整。


总结

煎煮方法亦随着科技发展,人们对药理学知识的了解而作出相应的调节。 但无论如何,若由病家自已进行煎煮,要他们掌握有关细节及常识而进正确的操作,相信是一件很因难的任务。

最后,在此简述煎煮方法作为总结 : 在复方汤剂煎煮前应先知道那些药物须先煎后下及作相关处理例如须粉碎,之后可参考上述公式估计加水量。然后将泠水及药物放入较大容积的陶瓷质容器内浸泡约30钟。之后开始煎煮,先用大火(武火)至沸腾后才转用小火(文火)继续煎煮并保持微沸状态。 煎煮完成后可去渣取液口服。解表药煎煮时间约为20分钟,清里药和温补药约30分钟而厚味滋补药约45分钟;厚味滋补药宜煎煮三次并将三次所得药液混匀后再分服,其他可煎煮二次。



参考文献

[1] 刘芳 <浅议汤剂煎煮方法与临床疗效的关系> 湖北中医杂志[J] 2004 26(8) : 55
[2] 陈永刚 童学飞 <浅析影响中药汤剂疗效的原因> 湖北中医杂志[J] 2003 25(2) : 51-52
[3] 莫文先 <浅析中药汤剂疗效下降的因素> 时珍国药研究[J] 1997 8(1) : 82-83
[4] 吴文 <中药汤剂特殊煎法的探讨> 时珍国药研究[J] 1997 8(4) : 364-365
[5] 焦立红 任雷鸣 李青 <四种不同方法制备四物汤的疗效比较> 时珍国药研究[J] 2007 18(6) : 1441-1442
[6] 徐东宁 <对汤剂煎煮法中先煎及后下法改进的设想> 时珍国药研究[J] 1998 9(2) : 170
[7] 王力智 刘冰 <中药煎剂药量、加水量、火候、煎煮时间和煎取量间关系的实验探讨> 中国药房[J] 1997 8(2) : 94-95
[8] 叶雪琴 <中药煎煮法对药物疗效的影响> 海峡药学[J] 2004 16(6) : 144-145
[9] 王亚红 张瑞芳 王雅哲 <影响中药汤剂疗效的因素及中药汤剂发展> 药学服务与研究[J] 2004 4(1) : 77-79
[10]单建学 <中药汤剂煎煮方法对临床疗效的影响> 湖南中医药导报[J] 2002 8(11) : 692-693
[11]李士勇 <先煎后下中药煎煮方法及法研究进展> 湖南中医药导报[J] 1997 3(6) : 40-43
[12]董正华 <从经方谈汤剂的煎法> 陕西中医函授[J] 1998 3 : 6-8
[13]路锦玲 <中药汤剂的煎煮方法与对临床疗效的影响> 中南民族学院学报(自然科学版)[J] 1998 17(3) : 88-90
[14]林汉芳 <中药汤剂煎煮方法的体会> 现代中医药[J] 2002 6 : 60-61
[15]张爱国 任建素 <浅论汤剂之煎服> 承德医学院学报[J] 1999 16(3) : 247-249
[16]蔡小玲 <中药汤剂对临床疗效的影响> 桂林医学院学报(医药应用与研究专辑)[J] 9 : 173-174
[17]何祖鞭 <中药煎煮与药物疗效> 淮海医院[J] 2000 18(2) : 151
[18]杨洪霞 孙凤琴 <浅谈中药汤剂煎煮与疗效> 工企医刋[J] 2006 19(2) : 53-54

香港刑事檢控工作點滴

律政司刑事檢控科 (Prosecutions Division Department of Justice) 代表香港特別行政區 (Hong Kong Special Administrative Region) 提出刑事檢控及負責香港的刑事檢控工作,律政司司長 (Secretary for Justice) 及其獲授權人員對是否進行刑事檢控享有最終的决定權。

刑事檢控所依据的有普通法 (Common Law) 及成文法 (Statutory Law);因上級法院(高等法院 High Court)所作判决的案例 (Case Law) 對下級法院具法律上約束力,故亦會作為檢控的依据。

律政司總部設於金鐘政府合署高座,而被派駐於全港七個裁判法院的檢控科人員負責處理與檢控有關的日常工作。

所有循公訴程序 (upon indictment) 檢控的案件須由律政司刑事檢控科同意后再向法院提出。但只循簡易程序 (summary proceedings) 提出檢控的案件,香港的執法機構如香港警務處、香港海關,及一些政府部門如食環署、消防處、稅務局等,己獲司長授權可自行提出檢控。

警方負責所有與刑事檢控有關的調查及取証工作,案件主管對是否有足夠證據提出檢控需要作出初步評估。若警方决定循簡易程序檢控,須將有關文件,包括控罪書 (charge sheet)、案情撮要 (brief facts) 及相關文件例如毒品案件的化驗報告 (Chemist certificate) 等送交裁判法院的檢控科進行法律程序,例如要求被告人就控罪表示認罪與否 (arraignment),或向法院申請將案件押後 (adjournment) 以便警方完成調查或取証工作。

所有循公訴程序的案件,警方須將案件的卷宗呈交律政司刑事檢控科相關的組別作考慮,以便(一)决定是否對案件所涉罪行提出公訴,(二)完成及簽署進行公訴的法定文件。 稍后,警方將宗卷交回裁判法院檢控科繼續循簡易程序檢控或完成進行公訴所需的其他程序將被告人及案件移交區域法院或原訟庭處理。





案件的被告人可獲法院擔保 (bail) 待日後到庭或遭收押 (in custody) 而失去自由。

可公訴罪行 (indictable offence) 是沒有檢控期限的,但簡易程序罪行除法例訂明檢控期限 (time bar) 外,一般須在犯罪行為完成后六個月內提出檢控。

在刑事審訊中(criminal trial),舉證責任 (onus of proof) 在提出檢控的一方。除法律訂明外,被檢控一方並無舉證責任。被告人享有無罪的法律推定 (presumption of innocence)。

審訊程序由控方傳召証人宣誓作口頭証言 (oral testimony) 開始;証人作供的過程有三個階段,即由控方主問 (examination in chief);接著是辯方的盤問 (cross-examination) 及之后是控方的覆問 (re-examination)。覆問所涉內容只能觸及盤問的範圍。

証人的書面証詞 (witness statement) 一般不能成為被法庭接納的証據。案件的受害人 (victim) 必然是証人之一。其他証人可以是擁有專長或專業知識的專家 (expert witness)。

控方的舉證內容可能還包括被告人的供述和辯解(被告人自白口供 admission/confession)、依法可成為証据的書面証詞,如化驗報告和銀行的誓章 (bankers’ affirmation)等。

若被告人自白口供的自願性 (voluntariness) 受辯方質疑,法庭須進行“非自願性自白排除”的審訊 (viore dire),習慣上稱為“案中案”。非自願性自白是指被告人在暴力、威迫、利誘或欺詐等情况下所作的供述或辯解。就被告人自白口供的自願性,舉證責任亦在提出檢控一方。

控方於舉證完畢時,必須明確向法庭說明控方已提出所有的証據。辯方可以就控方所提證据不足之處作出中段陳詞 (half time submission),控方亦可陳詞。接下來法庭須裁决表面証据 (prima facie evidence) 是否成立並頒令被告是否需要就所面對的控罪答辯 (case to answer)。





若法庭裁定表面証据不成立,被告人便無須就控罪答辯並獲無罪釋放 (acquittal)。 若表面証据成立,被告人須選擇是否作供,作供與否,被告人都可傳召辯方証人。若被告人選擇作供,被告人必須先於其他辯方証人作供,但專家証人則屬例外。

雖然被告人沒有舉證責任,但辯方提出證据是希望可以製造疑點以削弱控方的證据,因為所有疑點利益 (benefit of doubt) 歸於被告人。辯方於完成所有證据時,亦必須明確向法庭說明辯方已提出所有的證據。此時,控方先作最后陳詞 (final submission),接著就是辯方的陳詞。法庭然後作出是否有罪的裁决。

若被告人被判無罪而又向法庭作出申請,除非有實在原因 (positive reason) 可以拒絕,否則在一般情况下法庭會頒令控方支付被告人的訴訟費用 (defence costs)。實在原因的例子如被告人於店鋪內取去貨物而不付款離去,因其自身行為引人疑竇 (bring suspicion)而就盜窃罪檢控,若經審訊后被判無罪,法庭亦不會作出控方支付訟費的命令。

控方亦須在審訊前的充足時間內向辯方主動披露與檢控有關的材料 (disclosure),這披露材料的責任所涉及的材料廣及所有政府機構、部門所管有的材料,而不局限於執法機關。若於審訊當天,被告人並無律師代表,控方必須將材料當庭交給被告人。被告人若需要時間了解材料內容,法庭一般會押後審訊以便被告人有足夠時間處理自辯的事宜。法庭就某些性質、內容的材料是否必須披露可作出裁决。

裁判法院設有當值律師服務 (Duty Lawyer Scheme Service),被告人可獲當值律師代表出席法庭聆訊。

香港的裁判法院有港島區的東區裁判法院,九龍區的官塘裁判法院、九龍城裁判法院、荃彎裁判法院及新界區的沙田裁判法院、粉嶺裁判法院及屯門裁判法院。裁判法院由高級一等法庭檢控主任主管一切日常與檢控有關的工作。







香港的法庭就刑事審訊方面可區分成三個級別,即裁判法院法庭 (Magistracy)、區域法院法庭 (District Court) 及高等法院原訟法庭 (Court of First Instance)。它們最顯著的分別在於判處最高刑罰的權限。各級法院皆由司法機構 (Judiciary) 管理。

裁判法院法庭處於司法機構的基層,所進行的是簡易法律程序,有別於在區域法院及原訟法庭處理公訴罪行的程序。於裁判法院,控辯雙方多就所指控的事實有所爭拗,反而在法律觀點上的爭拗並不常見。裁判法院作為基層司法機構,所有檢控程序須由裁判法院開始。

裁判法院另一特色是工作量大,案件數目多及處理相對較為輕微的罪行。於二零零七年,裁判法院處理約十八萬宗檢控工作。

裁判法院內有多個法庭,以屯門裁判法院為例子,第一法庭由主任裁判官 (principal magistrate) 主審,所有新案都先在此庭處理。第三法庭為青少年法庭 (juvenile court),聆訊過程不對外開放。第八法庭只處理小販阻街、無牌販賣、交通違例及其只涉及罰款的輕微違法等檢控事項的聆訊。其他三個法庭只處理不認罪案件的審訊,每個法庭每天平均須要處理三宗審訊。

在裁判法院可以代表控方或作為控方的,還有接受外判工作的私人執業大律師 (Barrister) 或律師 (Solicitor)、某些包括檢控職能的政府部門人員,最常見的例如入境處、食環署、消防處、稅務局等等。根據現行法例,個人亦可用私人身份向裁判法院提出刑事檢控 (private prosecution),例如一些管理行車隧道的公司對違規駕駛者所提檢控就是利用這個私人檢控方式。