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),例如一些管理行車隧道的公司對違規駕駛者所提檢控就是利用這個私人檢控方式。

一杯清茶、一本好書

「一杯清茶、一本好書」這八個字,不單是實實在在的說明面前的一杯茶和手中的一本書,對於年近半百的我,這八個字所代表的是一種境界、是一種福氣、可能更是一種奢望!
這寥寥數字對於這刻的我,實有當頭棒喝的頓悟效果。它們提醒我須快快給自己準備一個體質及精神都是在健康狀態的身體。只有這樣的身體才能創造這種境界、享受這種福氣。亦只有這樣才能感受無須記掛工作、可以拋開雜務的清靜;才能感受摒棄一切雜念的安寧;才能感受外間世界時間永遠停頓和不受干擾的孤獨所帶來的專注。加上閱讀一本好書每每使我激動和喜悅,亦使我能進入作者的世界探索。清靜、安寧和專注將我引進那文字世界的深處。我像坐在過山車上,衝過作者文字世界裡一個又一個思想的峰巒,為作者的絕妙創作而驚呼。
偶爾於夜闌人靜,我完成手上的工作後,徐手拿來書本閱讀時,也只有些微恰恰能進入這種境界的感受。
中國人只用一個 '心' 字就抽象概括了現代人提及腦及精神情志相關的事。我們必須保持 '身' 與 '心' 的健康。我們縱使能品茗名茶又同時手執好書,就是放不下辦公室的事情、抹不去與他人的是非恩怨,我們又甚能嘗到 '茶與書' 所帶來那境界的滋味呢!
'...在星光下,"爆谷"和可樂尤勝香檳及魚子醬...',一首膾炙人口的英文歌所描寫的境界。但什麼的 '身心' 能帶出這種意境?那就是 : '...於盛夏長夜與所愛纏綿...'。亦只有在這特定的環境中才能衍生這種情懷。
人生苦短,很多人只顧工作和不願洗滌我們的心靈、改善我們身體的素質,轉眼又過了數拾寒暑。正是春去秋來老將至,請大家早為明日能保持身心健康作好準備,否則只怕為時已晚。

我們終日形形役役,硬是要將做不完的工作做完,加上現代人的生活大多缺乏規律,致使身心疲憊。更甚者,這令我們百病叢生,大大縮短了壽命的週期。我們祖先在千多年前已總結出以下的養生大道理並載於《黃帝內經》中 : 「'...法於陰陽, 和於術數, 食飲有節, 起居有常, 不妄作勞, 故能形與神俱...'」。 其中道理就是要人們效法大自然的變化規律和特點來調養身心和施行合宜的修身(包括運動)養性之法等等,致使形體保持健壯和各項生理功能旺盛與精神飽滿((形神俱) ) 。 他們亦精確地概括了未老先衰的主因 : 「'...以酒為漿, 以妄為常, 醉以入房, 以欲竭其精, 以耗散其真, 不知持滿, 不時御神, 務快其心, 逆於生樂, 起居無節, 故半百而衰也...'」。 這說明人們每每恣意妄為、放縱嗜欲、貪圖一時之歡樂、耗竭先天稟賦,致令早衰而削弱生命能力。
先賢們亦提醒我們要認識 '亞健康' 狀態的重要性 - 一種即非病人又非健康人的中間狀態。它的大概情況是人們自感不適,但所有的身體檢查卻說沒有病,對治療又不得效果的一種身心狀態。據資料報導,現今世界上的人口中有近半數處于這種 '亞健康' 狀態。非感染性疾病如高血壓、冠心病、糖尿病,甚至癌病等的前期階段,往往呈現'亞健康' 狀態。要保持身心健康才能避免這種狀態。但我們必須知道保持身心健康是一個長期的過程,不是一朝一夕能夠成功的。
我們公務員的工作量很大,工作時數很長,各階層的員工都承受程度、性質不同的工作壓力。我們十居其九己經與 '亞健康' 狀態伴隨了一段日子。
我從書本中偶然讀到諸葛亮如何教導他的兒子,其中竟然有提及 '維護健康重身體' 的重要性。我相信其中一些指導性原則,很適合我們公務員參考及好好掌握。
諸葛先生勸人們對工作無須過于狂熱,否則就是一種病態。工作過度徒令身心皆疲,使表現差強人意,對自己、對部門都沒有好處。再者休息並不是懶惰,卻是為下一步工作做好准備,令員工處理新工作時更出色。
武侯還要我們在感到疲勞之前先休息。他強調保持充沛活力的方法在于防止疲勞,而防止疲勞最重要是休息。休息就是修補,即使只打五分鐘的瞌睡,卻能有很強的修補能力,使精神快速恢復。
先生亦告戒我們要養成良好的運動習慣和教導我們如何正確地面對壓力。他要兒子記住運動的格言 : 「坐比躺好,站更好,走又勝于站,但跑最好。」 他解釋壓力的成因 : 人們想做的事情太多,但可以完成的總是太少。 有時巨大的壓力能爆發巨大的潛能,所以壓力不一定是壞的。但壓力超過能承受的范圍時,我們會心力衰竭,不堪重負或產生一些心理疾病。
先生進一步教導我們要學會丟包袱,即不去做、或少去做,次要的事情。他要我們善待自己和放低標准。他提醒我們至善至美只是一個遙遠的夢,不要妄想把所有事情都做得完美無缺。他催促我們趕快擺脫這個束縛,快快放鬆自己。他也指出我們自己的虛榮心亦導致許多壓力的產生。因此,朋友,請緊記要時刻遠離虛榮,不要有負諸葛先生的教誨。
我還有不到拾年便能離開工作崗位退休,我希望在退休後可以享受這樣的境界 : "老而彌堅、風清月皎、一杯清茶、一本好書"。
最後我要向大家介紹一本書,好向各位有所交待。我沒有資格評定它是否一本好書,但它無疑是一本"好看"的書。它的內容豐富、有趣及全面介紹世界重要文字的發展歷史。它就是周有光先生所著、由上海世紀出版集團及上海教育出版社出版發行的《世界文字發展史》。

回應大公報"井水集"以 [檢控引例,豈可出錯] 為題一文

該文章作者在評論一宗西區裁判法院案件時,曾經用上[檢控主任]、[法庭的檢控主任]及[法庭檢控主任]這些詞。我只想向作者提供少許意見,作為關昭人兄日後撰寫有關法庭文章時參考之用。
[法庭檢控主任]是一個專有名詞,是法庭檢控主任職系最基層的職級。若然作者只是泛指代表控方出席裁判法院的代表時,請查明該代表控方的先生或女士,是否本職系的成員,才用上這個名詞。在裁判法院可以代表控方或作為控方的,除[法庭檢控主任]外,還有政府律師、接受外判工作的私人執業大律師或律師、某些包括檢控職能的政府部門的相關人員,最常見的例如食環署、消方處、稅務局等等的部門代表。
根據現行法例,一個個人亦可用私人身份向裁判法院提出檢控,例如一些管理行車隧道的公司對違規駕駛者所提檢控就是利用這個私人檢控方式。
我本人萬分希望作者能小心處理,查有實據後,並依事實報導,還本職系成員一個公道。

理想的教科書

時下的中小學教科書不單在價格上令人咋舌,在紙張用料及印刷方面,亦給人一種奢侈的感覺。加上改動版本次數之頻密,出版商面對謀取暴利的批評也是理所當然的。況且,舊版本的書也未能獲得洽當的處理,最終也逃不掉被棄置的命運。無論從環保或節儉的角度出發,所有與教科書製作有關的細節是值得檢討的,甚至要求政府對相關的教育政策作出較長遠的安排及根本的改動來加以配合。

政府應一力承擔教育的使命,在資源上亦應給予優先的分配。就教科書一事,我個人覺得應該由政府統籌,包括訂定內容、教材及出版事宜。我很推崇國內版書籍有關價格及用紙的正確方向,它們價格便宜並只使用很普通的紙張來印製,例如,一本約三佰多頁的A4大小國內版書售價只三拾多港元。當然一本書的售價涉及很多因素,不能只考慮書本的大小及所用紙張的質料。無論如何,這值得港產教科書借鏡,但也肯定是一個沒有盈利的買賣,這也正是要求政府承擔的理由。

我認為一本理想教科書應該是這樣誕生及獲得重生的 : 政府訂定教科書內容及教材,並規定用最普通的,可循環再用的紙張來印製;規定所用字體、書本的大小尺寸 - 例如,所有書本一律是A4大小。政府用一低廉價格將書售給學生,並承諾於學期完結後,用一個更低廉的價格向學生回購這些由政府發行的教科書作為印製新書所需的紙張原料。相信經多次將舊書作為原料循環再用及控制不必要的改動版本次數,政府便能減低這方面的成本。同時,政府亦應鼓勵並資助民間商人從事這種有意義的出版工作。

劃一書本的大小使書包的空間得到充份的利用,並能使書包的生產商有標準可依,令大小能配合書本。過小的字體恐怕會影響學生的視力,不必要的使用大尺寸字體亦會浪費紙張。

一管之見 半點回憶

香港的教育政策,可謂朝令夕改,使學生、老師及家長同感傍徨。於無奈嘆息之同時,亦勾起我童年學習期間零碎回憶 . . . . . .

我是六十年代初來到香港的 "小人蛇"。當時還未屆入學年齡。父母也早出晚歸,為生活擔子而辛勤工作。當時的幼稚園教育並不普及,我一如其他大多數適齡的孩童,第一次踏入校門就是小學一年級。當時開設在屋村天台的小學無疑是一處積極承擔教育使命的場所。但我因居所地點的關係,進入了一所位於鯉魚門由教會主理的鄉村學校就讀。雖然學校為平房式單層獨立校舍,學習環境比較天台小學為佳,但因每年級的學生人數參差及不多。我們是幾個年級的同學共用一個較大的課室,並由同一名老師任教。當某一年級上課完畢,老師只須向左或向右移動數步,便開始教授另一個年級的課程。當時與大哥哥和大姐姐一起上課的情形,我腦海中的記憶尤新。當時的老師給我的印象是很年青,很友善。

在這所學校讀了三年,我的感覺是很多時間都是在嬉戲中渡過,常常與同學到山野遊玩。我開始做家課的時間通常是晚上母親工作回來之後,因我當時居住的地方是沒有電力供應的,所以大部份的家課都是在燭光下及母親的責難聲中草率完成。那個年代,很多父母都為了生計須出外工作,我亦因此須於放學後獨自留在家中。我亦因屢次拒絕 "享用" 母親預留的飯餐,母親在沒有其他可行辦法下,只有求助於學校,因此學校 "破天荒" 收取我每月拾元膳食費,從那天開始我便與校長,主任及所有老師共同用膳,這也正是惡夢的開始。從那時開始,不論那個科目欠交功課,那一科目的問題答得不好,各位老師都會不約而同的在用膳的時間向我 "教導" 一番。

當時每一年級最多也不過拾來人,考試測驗都不太困難,升班之後也是在同一課室,只是課本不同吧。後來因遷往公共屋村居住而轉往一所屋村內的教會小學就讀。因投考四年級插班生的成績很差,所以須要重讀三年級。我當時的數學成績也比較差,所以五六年級那二年,我參加了學校的補習班。補習班雖然在學校上課,但老師都是學校再聘請的,當時的補習老師大部份都是讀預科的學生。六年級那年終於報考了 "升中試",當時只知道 "升中試" 會決定你將來要讀的是那一間中學。學校雖然也有額外的 "中英數" 習作,但老師們並沒有特別強調 "升中試" 的重要,只覺得老師們只是如常一般的授課,父母也沒有特別的緊張。一切就是那麼的平常,又是那麼的理所當然. . . . . .

當時學生的目標既簡單又明確,升中試讓你有機會選擇入讀香港九龍新界任何一間中學。唯一的條件就是要在升中試考取好的成績。跟著的就是中學會考、港大入學試或中大入學試。當時的預科畢業生還可選擇其他當時的大專院校如 : 理工、浸會等,也可報考英國倫敦大學在港主理的普通教育文憑試,也可考慮到外地升學等等途徑。當然有更多的中五、預科畢業生在別無選擇下要投身社會工作。雖然當時亦 "製造" 了一些 "香港怪現象",例如 : 大學入學試合格而又被摒諸大學門外,劉家傑主持的問答比賽成為報考升中試學生的選校指南,但當時整體的或個人的學術水平並不遜色。

我個人並不反對考試制度,一個公平的考試制度不失為一種評估、篩選及編配的好工具。制訂教育政策的決策者給我的印象是他們正朝著完全廢除考試制度為最終目的。他們提出的支持論據於我而言只是因過份 "溺愛" 及 "維護" 學生為大前提所衍生的。學習承受壓力、處理壓力、體驗失敗、接受失敗是個人成長中的維生素及養份。我相信每個學生都能從考試制度中獲得這方面或多或少的經驗。雖然我們不應鼓吹功利主義,況且教育工作是百年樹人之偉業。但考試制度所衍生適量的功利主義,也可作為自我奮鬥、進取的原動力。我相信大部份人都擁有與生俱來的惰性,適量的考試是不可或缺的。


這些年來,教育改革只停留於形式上或只觸及一些方法的選用,而我所期望的改革卻是一些根本的、觀念方面的。 而涉及的層面不單是政府辦教育的有關當局及老師,更重要的是學生們的父母,當然包括自己在內。
家長們往往將學生學業成績作為個人日後成就的指標,也就順理成章地將學業成績作為一個量度的準則。 並用來評定學校的等級,作為取捨的依据,或依此來評核教師。 我相信家長們應該改變這方面的觀念,因為這種觀念將是改革的絆腳石。 亦只有能夠改變或去除此種觀念,才有根本的改革。 否則學生求學時期的家庭生活只能是學校課堂的延續,家長們也變成教師吧了,父母與子女沒有太多時間閒話家常,更沒法對週遭發生的事討論一番或表達觀感。 因為大多數的家長都忙於督促子女完成家課或替他們溫習,不敢鬆懈。
我們知道,接受教育的學生們是不同的個體,不論長幼,都有自己的獨立思想,獨特性格。 我個人認為教育的目的並非將一些觀念、資料強加於他們的記憶中。 而是教曉他們一些方法,掌握一些工具,使他們可以自己探究並尋找他們希望能達致的境地,無論是精神上的或實務上需要的技術水平。 亦使他們知道人與人溝通的重要性,並在學校的環境中親身體驗和學
習實踐。 我個人認為這些都離不開對語言和文字的熟練運用及掌握。 因語言和文字的本質是聲音及符號,故廣義來說應包括音樂及繪畫。 假如我是中小學課程的設計者,我會建議中小學應著重語言和文字的訓練,並必須學習多種不同語言和相關的文字,並加插適量的音樂及繪畫課程。 在教導語言和文字運用的有關課程中,教師應有意識地適量加入一些能令學生認識本國歷史及人生哲理的材料。 而有關數理化生物等理科的科目,我建議由課程中剔除,改由老師用課外活動的形式介紹一些很簡單及基本的慨念,只作為一種普通常識去處理便己經足夠。 深入地學習數理化生物等科目,是給那些有興趣並有志投身鑽研該門專科學問的學生進入大學時選讀的。 有些人終其一生都沒用得上在學校費了九牛二虎之力才能勉強合格的物理學或附加數學,我總覺得這些科目還是留給有心的同學在大學階段努力算了。 我相信語文能力高的同學,學習任何新事物都能事半功倍。
這樣的話,我們的準則只有一個,就是語文能力的高低。 學校亦有較多時間安排教學內容。 我相信學生亦無必要將學校的功課帶回家,而因此可以享受真正的家庭生活。

刋於二零零三年大公報

評星島日報於二零零三年十月二十日對律政司刑事檢控科法庭檢控主任職系的不持平不公允及以徧概全報導
身為職系成員,本人對報導內容感憤怒並覺強烈受屈,原想對此文字媒体自毀長城棄公信力於不顧的失責行為一笑置之。但又恐報導內容對市民大眾有三人成虎之危,對本職系有誹謗抹黑之險。故憤然用個人身份執筆以澄清徧頗報導。
報導由一宗裁判法院案件作點題,並在絕無邏緝基礎及理據下由此個別案件引申出評擊整個職系的負面結論。只根據個別事件而在缺乏邏緝基礎及理據下得出的這些結論,就是以徧概全。只轉述辯方女大律師的近乎誹謗及似是而非的言論,就是有欠公允。參與事件的個体除法庭檢控主任外,還有其他,為何只針對法庭檢控主任作出一面倒的報導而缺乏對其他個体的評語,這實非持平之舉。同一版面又將吳議員詞窮理屈,了無新意嚷著要取代本職系的言論重提。雖然當日同一版面及翌日(相對於早一日的大篇幅及高姿態排版,此次只用小篇幅刊於不顯眼處)亦有江專員的支持文章見報,但綜觀整個報導方式實令人質疑其用意。
該報導的大字標題為"中七生當檢控主任遭詬病"。但當日處理案件的同事是不折不扣的大學畢業生。這樣的標題無可避免會令讀者得出錯誤的結論:當日的檢控主任是一名中七生,所聲稱的錯漏百出及欠專業知識亦源於該名檢控主任是一名中七生。避免產生此誤導結果絕對是文字媒體的責任。若該大字標題只是想反映本職系的入職學歷是中七程度,有關人員是否應該小心遣詞用字免授人以柄,蒙上別有用心之嫌。
本人於八八年入職,正是中七預科學歷,同時期受訓的其他十七位學員,除其中一位亦是中七生外,他們都擁有當時的大專程度及學位學歷。但有一點很重要,就是我們所有學員都有工作經驗。本人七八年預科畢業,如本人的中七生究竟質素如何,就像品評紅酒,請看看年份自有公論。但無論如何,於入職一段期間後仍是中七生的法庭檢控主任,絕無僅有。我和我的那位中七生同期學員亦於多年前取得學位,他更上一層樓已成為私人執業大律師。
裁判法院法庭處於司法機構的基層,所進行的是簡易法律程序,有別於在區域法院及原訟法庭處理公訴罪行的程序。法庭檢控主任職系只出席裁判法院循簡易法律程序進行檢控。於裁判法院,控辯雙方多就所指控的事實發生爭拗,對法律觀點的爭拗並不常見。雖有亦是法庭檢控主任能處理的範籌。只有佷少數的個別案件要政府律師或外判律師協助。
裁判法院作為基層司法機構,另一特色為工作量大,案件數目多及處理相對較為輕微的罪行。既然各級法院在職能上都有分工,而本職系只專注基層法院檢控工作,在安排上簡直是配合得天衣無縫。當年能作出如斯構想的政府大員,智慧不亞於發明"一國兩制"的小平同志。
法律工作實有賴一群輔助人員協助才竟全功,例如參與律師或大律師日常事務的律師行法律行政人員,在律政司工作的律政書記。基層法院的檢控工作就讓法庭檢控主任肩負及協助,這種安排及設計完全是務實的及洽當的,以便大律師們能全力處理其他更上一級法院事務。
每一位法庭檢控主任都曾接受為期九個月的訓練。相對於一名律師或大律師的四年大學課堂學習,就刑事訴訟這一節,一名法庭檢控主任所受的培訓,絕不少於他們。因為四年大學法律課程中,刑事訴訟課程只佔有限比重,廣而不專。九個月的培訓,其內容專注刑事訴訟,故法庭檢控主任有關刑事訴訟的專業知識絕不遜於他們。況且專業資格與專業知識亦不見得一定有邏緝上的必然關係,良好專業知識無須以專業資格作為大前題。參與法庭檢控主任有關刑事訴訟培訓工作的律政司人員,每位的資歷與學術背境與大學相關學系的講師無異。所以就受訓的內容、受訓時間的長短、師資、工作上累積的經驗,法庭檢控主任有關刑事訴訟的專業知識及水平無容置疑。因我們是一群專業的法庭檢控主任。
外間可能覺得法庭檢控主任於日常工作中往往須要請示上司,諮詢有關的當事人部門,諮詢罪行的受害人。而將這種做法錯誤地及有意識地與專業資格掛鈎,因而得出更錯誤的結論,以為若由大律師或律師担任檢控工作便不會出現此等問題。其實這樣做只是跟從既定的程序及制度。外判律師亦要遵從此等程序及制度,與是否具有專業資格全無關係。吳議員及該名戴姓的大律師應該很清楚,除非她們從未做過外判工作。
檢控工作除了要掌握書本上的材料,最新的有關案例外,最重要還需具備成熟的個性,豐富的人生經驗。檢控工作要處理的還有‘人’這個元素,該大批吳議員所指的畢業生,相信大多是剛離校及沒有太多人生經驗的小伙子,能有更多與檢控工作無關的社會及人生閱歷對他們是必須的先決條件。這正正是有些地區要求修讀法律學位的學生須持有第一個學位,究其原因想必是認同法律工作所不可或缺的人性元素。
本人希望這些內容有助大家更了解法庭檢控主任的背境及工作性質,並給本職系一個持平公允的評語。