nirvdrum-ai4r 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. data/.gitignore +1 -0
  2. data/.rakeTasks +7 -0
  3. data/README.rdoc +56 -0
  4. data/Rakefile.rb +42 -0
  5. data/VERSION +1 -0
  6. data/ai4r.gemspec +221 -0
  7. data/change_log +49 -0
  8. data/examples/classifiers/id3_data.csv +121 -0
  9. data/examples/classifiers/id3_example.rb +29 -0
  10. data/examples/classifiers/naive_bayes_data.csv +11 -0
  11. data/examples/classifiers/naive_bayes_example.rb +16 -0
  12. data/examples/classifiers/results.txt +31 -0
  13. data/examples/genetic_algorithm/genetic_algorithm_example.rb +37 -0
  14. data/examples/genetic_algorithm/travel_cost.csv +16 -0
  15. data/examples/neural_network/backpropagation_example.rb +67 -0
  16. data/examples/neural_network/patterns_with_base_noise.rb +68 -0
  17. data/examples/neural_network/patterns_with_noise.rb +66 -0
  18. data/examples/neural_network/training_patterns.rb +68 -0
  19. data/examples/neural_network/xor_example.rb +35 -0
  20. data/examples/som/som_data.rb +156 -0
  21. data/examples/som/som_multi_node_example.rb +22 -0
  22. data/examples/som/som_single_example.rb +24 -0
  23. data/lib/ai4r.rb +32 -0
  24. data/lib/ai4r/classifiers/classifier.rb +59 -0
  25. data/lib/ai4r/classifiers/hyperpipes.rb +118 -0
  26. data/lib/ai4r/classifiers/id3.rb +326 -0
  27. data/lib/ai4r/classifiers/multilayer_perceptron.rb +135 -0
  28. data/lib/ai4r/classifiers/naive_bayes.rb +259 -0
  29. data/lib/ai4r/classifiers/one_r.rb +110 -0
  30. data/lib/ai4r/classifiers/prism.rb +197 -0
  31. data/lib/ai4r/classifiers/zero_r.rb +73 -0
  32. data/lib/ai4r/clusterers/average_linkage.rb +59 -0
  33. data/lib/ai4r/clusterers/bisecting_k_means.rb +93 -0
  34. data/lib/ai4r/clusterers/centroid_linkage.rb +66 -0
  35. data/lib/ai4r/clusterers/clusterer.rb +61 -0
  36. data/lib/ai4r/clusterers/complete_linkage.rb +67 -0
  37. data/lib/ai4r/clusterers/diana.rb +139 -0
  38. data/lib/ai4r/clusterers/k_means.rb +126 -0
  39. data/lib/ai4r/clusterers/median_linkage.rb +61 -0
  40. data/lib/ai4r/clusterers/single_linkage.rb +194 -0
  41. data/lib/ai4r/clusterers/ward_linkage.rb +64 -0
  42. data/lib/ai4r/clusterers/weighted_average_linkage.rb +61 -0
  43. data/lib/ai4r/data/data_set.rb +266 -0
  44. data/lib/ai4r/data/parameterizable.rb +64 -0
  45. data/lib/ai4r/data/proximity.rb +100 -0
  46. data/lib/ai4r/data/statistics.rb +77 -0
  47. data/lib/ai4r/experiment/classifier_evaluator.rb +95 -0
  48. data/lib/ai4r/genetic_algorithm/genetic_algorithm.rb +270 -0
  49. data/lib/ai4r/neural_network/backpropagation.rb +293 -0
  50. data/lib/ai4r/neural_network/hopfield.rb +149 -0
  51. data/lib/ai4r/som/layer.rb +68 -0
  52. data/lib/ai4r/som/node.rb +96 -0
  53. data/lib/ai4r/som/som.rb +155 -0
  54. data/lib/ai4r/som/two_phase_layer.rb +90 -0
  55. data/site/forrest.properties +152 -0
  56. data/site/forrest.properties.dispatcher.properties +25 -0
  57. data/site/forrest.properties.xml +29 -0
  58. data/site/src/documentation/README.txt +7 -0
  59. data/site/src/documentation/classes/CatalogManager.properties +62 -0
  60. data/site/src/documentation/content/locationmap.xml +72 -0
  61. data/site/src/documentation/content/xdocs/downloads.html +9 -0
  62. data/site/src/documentation/content/xdocs/geneticAlgorithms.xml +294 -0
  63. data/site/src/documentation/content/xdocs/index.xml +155 -0
  64. data/site/src/documentation/content/xdocs/machineLearning.xml +131 -0
  65. data/site/src/documentation/content/xdocs/neuralNetworks.xml +270 -0
  66. data/site/src/documentation/content/xdocs/site.xml +54 -0
  67. data/site/src/documentation/content/xdocs/sourceCode.xml +43 -0
  68. data/site/src/documentation/content/xdocs/tabs.xml +35 -0
  69. data/site/src/documentation/resources/images/ai4r-logo.png +0 -0
  70. data/site/src/documentation/resources/images/c.png +0 -0
  71. data/site/src/documentation/resources/images/c_wbn.png +0 -0
  72. data/site/src/documentation/resources/images/c_wn.png +0 -0
  73. data/site/src/documentation/resources/images/ellipse-2.svg +30 -0
  74. data/site/src/documentation/resources/images/ero.gif +0 -0
  75. data/site/src/documentation/resources/images/europe2.png +0 -0
  76. data/site/src/documentation/resources/images/europe3.png +0 -0
  77. data/site/src/documentation/resources/images/fitness.png +0 -0
  78. data/site/src/documentation/resources/images/genetic_algorithms_example.png +0 -0
  79. data/site/src/documentation/resources/images/icon-a.png +0 -0
  80. data/site/src/documentation/resources/images/icon-b.png +0 -0
  81. data/site/src/documentation/resources/images/icon.png +0 -0
  82. data/site/src/documentation/resources/images/jadeferret.png +0 -0
  83. data/site/src/documentation/resources/images/my_email.png +0 -0
  84. data/site/src/documentation/resources/images/neural_network_example.png +0 -0
  85. data/site/src/documentation/resources/images/project-logo.png +0 -0
  86. data/site/src/documentation/resources/images/rubyforge.png +0 -0
  87. data/site/src/documentation/resources/images/s.png +0 -0
  88. data/site/src/documentation/resources/images/s_wbn.png +0 -0
  89. data/site/src/documentation/resources/images/s_wn.png +0 -0
  90. data/site/src/documentation/resources/images/sigmoid.png +0 -0
  91. data/site/src/documentation/resources/images/sub-dir/icon-c.png +0 -0
  92. data/site/src/documentation/resources/images/t.png +0 -0
  93. data/site/src/documentation/resources/images/t_wbn.png +0 -0
  94. data/site/src/documentation/resources/images/t_wn.png +0 -0
  95. data/site/src/documentation/resources/schema/catalog.xcat +29 -0
  96. data/site/src/documentation/resources/schema/hello-v10.dtd +51 -0
  97. data/site/src/documentation/resources/schema/symbols-project-v10.ent +26 -0
  98. data/site/src/documentation/resources/stylesheets/hello2document.xsl +33 -0
  99. data/site/src/documentation/sitemap.xmap +66 -0
  100. data/site/src/documentation/skinconf.xml +418 -0
  101. data/site/src/documentation/translations/langcode.xml +29 -0
  102. data/site/src/documentation/translations/languages_de.xml +24 -0
  103. data/site/src/documentation/translations/languages_en.xml +24 -0
  104. data/site/src/documentation/translations/languages_es.xml +22 -0
  105. data/site/src/documentation/translations/languages_fr.xml +24 -0
  106. data/site/src/documentation/translations/languages_nl.xml +24 -0
  107. data/site/src/documentation/translations/menu.xml +33 -0
  108. data/site/src/documentation/translations/menu_af.xml +33 -0
  109. data/site/src/documentation/translations/menu_de.xml +33 -0
  110. data/site/src/documentation/translations/menu_es.xml +33 -0
  111. data/site/src/documentation/translations/menu_fr.xml +33 -0
  112. data/site/src/documentation/translations/menu_it.xml +33 -0
  113. data/site/src/documentation/translations/menu_nl.xml +33 -0
  114. data/site/src/documentation/translations/menu_no.xml +33 -0
  115. data/site/src/documentation/translations/menu_ru.xml +33 -0
  116. data/site/src/documentation/translations/menu_sk.xml +33 -0
  117. data/site/src/documentation/translations/tabs.xml +22 -0
  118. data/site/src/documentation/translations/tabs_de.xml +22 -0
  119. data/site/src/documentation/translations/tabs_es.xml +22 -0
  120. data/site/src/documentation/translations/tabs_fr.xml +22 -0
  121. data/site/src/documentation/translations/tabs_nl.xml +22 -0
  122. data/test/classifiers/hyperpipes_test.rb +84 -0
  123. data/test/classifiers/id3_test.rb +208 -0
  124. data/test/classifiers/multilayer_perceptron_test.rb +79 -0
  125. data/test/classifiers/naive_bayes_test.rb +43 -0
  126. data/test/classifiers/one_r_test.rb +62 -0
  127. data/test/classifiers/prism_test.rb +85 -0
  128. data/test/classifiers/zero_r_test.rb +50 -0
  129. data/test/clusterers/average_linkage_test.rb +51 -0
  130. data/test/clusterers/bisecting_k_means_test.rb +66 -0
  131. data/test/clusterers/centroid_linkage_test.rb +53 -0
  132. data/test/clusterers/complete_linkage_test.rb +57 -0
  133. data/test/clusterers/diana_test.rb +69 -0
  134. data/test/clusterers/k_means_test.rb +100 -0
  135. data/test/clusterers/median_linkage_test.rb +53 -0
  136. data/test/clusterers/single_linkage_test.rb +122 -0
  137. data/test/clusterers/ward_linkage_test.rb +53 -0
  138. data/test/clusterers/weighted_average_linkage_test.rb +53 -0
  139. data/test/data/data_set.csv +121 -0
  140. data/test/data/data_set_test.rb +96 -0
  141. data/test/data/proximity_test.rb +81 -0
  142. data/test/data/statistics_data_set.csv +5 -0
  143. data/test/data/statistics_test.rb +65 -0
  144. data/test/experiment/classifier_evaluator_test.rb +76 -0
  145. data/test/genetic_algorithm/chromosome_test.rb +58 -0
  146. data/test/genetic_algorithm/genetic_algorithm_test.rb +81 -0
  147. data/test/neural_network/backpropagation_test.rb +69 -0
  148. data/test/neural_network/hopfield_test.rb +72 -0
  149. data/test/som/som_test.rb +97 -0
  150. metadata +238 -0
@@ -0,0 +1,96 @@
1
+ # Author:: Thomas Kern
2
+ # License:: MPL 1.1
3
+ # Project:: ai4r
4
+ # Url:: http://ai4r.rubyforge.org/
5
+ #
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Mozilla Public License version 1.1 as published by the
8
+ # Mozilla Foundation at http://www.mozilla.org/MPL/MPL-1.1.txt
9
+
10
+ require File.dirname(__FILE__) + '/../data/parameterizable'
11
+ require File.dirname(__FILE__) + '/layer'
12
+
13
+ module Ai4r
14
+
15
+ module Som
16
+
17
+ # this class is used for the individual node and will be (nodes * nodes)-time instantiated
18
+ #
19
+ # = attributes
20
+ #
21
+ # * direct access to the x and y values is granted, those show the position of the node in
22
+ # the square map
23
+ # * id => is the uniq and sequential ID of the node
24
+ # * weights => values of the current weights are stored in an array of dimension 'dimensions'.
25
+ # Weights are of type float
26
+ # * instantiated_weight => the values of the first instantiation of weights. these values are
27
+ # never changed
28
+
29
+ class Node
30
+
31
+ include Ai4r::Data::Parameterizable
32
+
33
+ parameters_info :weights => "holds the current weight",
34
+ :instantiated_weight => "holds the very first weight",
35
+ :x => "holds the row ID of the unit in the map",
36
+ :y => "holds the column ID of the unit in the map",
37
+ :id => "id of the node"
38
+
39
+ # creates an instance of Node and instantiates the weights
40
+ # the parameters is a uniq and sequential ID as well as the number of total nodes
41
+ # dimensions signals the dimension of the input vector
42
+ def self.create(id, total, dimensions)
43
+ n = Node.new
44
+ n.id = id
45
+ n.instantiate_weight dimensions
46
+ n.x = id % total
47
+ n.y = (id / total.to_f).to_i
48
+ n
49
+ end
50
+
51
+ # instantiates the weights to the dimension (of the input vector)
52
+ # for backup reasons, the instantiated weight is stored into @instantiated_weight as well
53
+ def instantiate_weight(dimensions)
54
+ @weights = Array.new dimensions
55
+ @instantiated_weight = Array.new dimensions
56
+ @weights.each_with_index do |weight, index|
57
+ @weights[index] = rand
58
+ @instantiated_weight[index] = @weights[index]
59
+ end
60
+ end
61
+
62
+ # returns the square distance between the current weights and the input
63
+ # the input is a vector/array of the same size as weights
64
+ # at the end, the square root is extracted from the sum of differences
65
+ def distance_to_input(input)
66
+ dist = 0
67
+ input.each_with_index do |i, index|
68
+ dist += (i - @weights[index]) ** 2
69
+ end
70
+
71
+ Math.sqrt(dist)
72
+ end
73
+
74
+ # returns the distance in square-form from the instance node to the passed node
75
+ # example:
76
+ # 2 2 2 2 2
77
+ # 2 1 1 1 2
78
+ # 2 1 0 1 2
79
+ # 2 1 1 1 2
80
+ # 2 2 2 2 2
81
+ # 0 being the current node
82
+ def distance_to_node(node)
83
+ max((self.x - node.x).abs, (self.y - node.y).abs)
84
+ end
85
+
86
+ private
87
+
88
+ def max(a, b)
89
+ a > b ? a : b
90
+ end
91
+
92
+ end
93
+
94
+ end
95
+
96
+ end
@@ -0,0 +1,155 @@
1
+ # Author:: Thomas Kern
2
+ # License:: MPL 1.1
3
+ # Project:: ai4r
4
+ # Url:: http://ai4r.rubyforge.org/
5
+ #
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Mozilla Public License version 1.1 as published by the
8
+ # Mozilla Foundation at http://www.mozilla.org/MPL/MPL-1.1.txt
9
+
10
+ require File.dirname(__FILE__) + '/../data/parameterizable'
11
+ require File.dirname(__FILE__) + '/layer'
12
+ require File.dirname(__FILE__) + '/two_phase_layer'
13
+ require File.dirname(__FILE__) + '/node'
14
+
15
+ module Ai4r
16
+
17
+ # A self-organizing map (SOM) or self-organizing feature map (SOFM) is a type
18
+ # of artificial neural network that is trained using unsupervised learning to
19
+ # produce a low-dimensional (typically two-dimensional), discretized
20
+ # representation of the input space of the training samples, called a map.
21
+
22
+ # for more have a look at http://en.wikipedia.org/wiki/Self-organizing_map
23
+ # an in-depth explanation is provided by Sandhya Samarasinghe in
24
+ # 'Neural Networks for Applied Sciences and Engineering'
25
+
26
+ module Som
27
+
28
+ # = Introduction
29
+ #
30
+ # This is an implementation of a Kohonen Self-Organizing Maps
31
+ #
32
+ # = Features
33
+ #
34
+ # * Support for any network architecture (number of layers and neurons)
35
+ # * Configurable propagation function
36
+ # * Optional usage of bias
37
+ # * Configurable momentum
38
+ # * Configurable learning rate
39
+ # * Configurable initial weight function
40
+ # * 100% ruby code, no external dependency
41
+ #
42
+ # = Parameters
43
+ # * dim => dimension of the input vector
44
+ # * number_of_nodes => is the number of nodes per row/column (square som).
45
+ # * layer => instante of a layer-algorithm class
46
+ #
47
+ # = About the project
48
+ # Author:: Thomas Kern
49
+ # License:: MPL 1.1
50
+ # Url:: http://ai4r.rubyforge.org
51
+
52
+ class Som
53
+
54
+ include Ai4r::Data::Parameterizable
55
+
56
+ parameters_info :nodes => "sets the architecture of the map (nodes x nodes)",
57
+ :dimension => "sets the dimension of the input",
58
+ :layer => "instance of a layer, defines how the training algorithm works",
59
+ :epoch => "number of finished epochs"
60
+
61
+ def initialize(dim, number_of_nodes, layer)
62
+ @layer = layer
63
+ @dimension = dim
64
+ @number_of_nodes = number_of_nodes
65
+ @nodes = Array.new(number_of_nodes * number_of_nodes)
66
+ @epoch = 0
67
+ @cache = {}
68
+ end
69
+
70
+ # finds the best matching unit (bmu) of a certain input in all the @nodes
71
+ # returns an array of length 2 => [node, distance] (distance is of eucledian type, not
72
+ # a neighborhood distance)
73
+ def find_bmu(input)
74
+ bmu = @nodes.first
75
+ dist = bmu.distance_to_input input
76
+ @nodes[1..-1].each do |node|
77
+ tmp_dist = node.distance_to_input(input)
78
+ if tmp_dist <= dist
79
+ dist = tmp_dist
80
+ bmu = node
81
+ end
82
+ end
83
+ [bmu, dist]
84
+ end
85
+
86
+ # adjusts all nodes within a certain radius to the bmu
87
+ def adjust_nodes(input, bmu, radius, learning_rate)
88
+ @nodes.each do |node|
89
+ dist = node.distance_to_node(bmu[0])
90
+ next unless dist < radius
91
+
92
+ influence = @layer.influence_decay dist, radius
93
+ node.weights.each_with_index do |weight, index|
94
+ node.weights[index] += influence * learning_rate * (input[index] - weight)
95
+ end
96
+ end
97
+ end
98
+
99
+ # main method for the som. trains the map with the passed data vector
100
+ # calls train_step as long as train_step returns false
101
+ def train(data)
102
+ while !train_step(data)
103
+ end
104
+ end
105
+
106
+ # calculates the global distance error for all data entries
107
+ def global_error(data)
108
+ data.inject(0) {|sum,entry| sum + find_bmu(entry)[1]**2 }
109
+ end
110
+
111
+ # trains the map with the data as long as the @epoch is smaller than the epoch-value of
112
+ # @layer
113
+ # returns true if @epoch is greater than the fixed epoch-value in @layer, otherwise false
114
+ # 1 is added to @epoch at each method call
115
+ # the radius and learning rate is decreased at each method call/epoch as well
116
+ def train_step(data)
117
+ return true if @epoch >= @layer.epochs
118
+
119
+ radius = @layer.radius_decay @epoch
120
+ learning_rate = @layer.learning_rate_decay @epoch
121
+
122
+ data.each do |entry|
123
+ adjust_nodes entry, find_bmu(entry), radius, learning_rate
124
+ end
125
+
126
+ @epoch += 1
127
+ false
128
+ end
129
+
130
+ # returns the node at position (x,y) in the square map
131
+ def get_node(x, y)
132
+ raise(Exception.new) if check_param_for_som(x,y)
133
+ @nodes[y + x * @number_of_nodes]
134
+ end
135
+
136
+ # intitiates the map by creating (@number_of_nodes * @number_of_nodes) nodes
137
+ def initiate_map
138
+ @nodes.each_with_index do |node, i|
139
+ @nodes[i] = Node.create i, @number_of_nodes, @dimension
140
+ end
141
+ end
142
+
143
+ private
144
+
145
+ # checks whether or not there is a node in the map at the coordinates (x,y).
146
+ # x is the row, y the column indicator
147
+ def check_param_for_som(x, y)
148
+ y > @number_of_nodes - 1 || x > @number_of_nodes - 1 || x < 0 || y < 0
149
+ end
150
+
151
+ end
152
+
153
+ end
154
+
155
+ end
@@ -0,0 +1,90 @@
1
+ # Author:: Thomas Kern
2
+ # License:: MPL 1.1
3
+ # Project:: ai4r
4
+ # Url:: http://ai4r.rubyforge.org/
5
+ #
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Mozilla Public License version 1.1 as published by the
8
+ # Mozilla Foundation at http://www.mozilla.org/MPL/MPL-1.1.txt
9
+
10
+ require File.dirname(__FILE__) + '/../data/parameterizable'
11
+ require File.dirname(__FILE__) + '/layer'
12
+
13
+ module Ai4r
14
+
15
+ module Som
16
+
17
+ # responsible for the implementation of the algorithm's decays, extends the class Layer.
18
+ # currently overrides the radius and learning rate decay methods of Layer.
19
+ # Has two phases, phase one has a decay in both the learning rate and the radius. The number
20
+ # of epochs for both phases can be passed and the total number of epochs is the sum of epoch
21
+ # for phase one and phase two.
22
+ # In the scond phase, the learning and radius decay is steady, normally set to a small number (ie. 0.01)
23
+ #
24
+ # = Parameters
25
+ # * nodes => number of nodes in the SOM (nodes x nodes). Has to be the same number
26
+ # you pass to the SOM. Has to be an integer
27
+ # * radius => the initial radius for the neighborhood
28
+ # * phase_one => number of epochs for phase one, has to be an integer. By default it is set to 150
29
+ # * phase_two => number of epochs for phase two, has to be an integer. By default it is set to 100
30
+ # * learning_rate => sets the initial learning rate
31
+ # * phase_one_learning_rate => sets the learning rate for phase one
32
+ # * phase_two_learning_rate => sets the learning rate for phase two
33
+
34
+ class TwoPhaseLayer < Layer
35
+
36
+ def initialize(nodes, learning_rate = 0.9, phase_one = 150, phase_two = 100,
37
+ phase_one_learning_rate = 0.1, phase_two_learning_rate = 0)
38
+ super nodes, nodes, phase_one + phase_two, learning_rate
39
+ @phase_one = phase_one
40
+ @phase_two = phase_two
41
+ @lr = @initial_learning_rate
42
+
43
+ @phase_one_learning_rate = phase_one_learning_rate
44
+ @phase_two_learning_rate = phase_two_learning_rate
45
+
46
+ @radius_reduction = @phase_one / (nodes/2.0 - 1) + 1
47
+ @delta_lr = (@lr - @phase_one_learning_rate)/ @phase_one
48
+ @radius = (nodes / 2.0).to_i
49
+ end
50
+
51
+ # two different values will be returned, depending on the phase
52
+ # in phase one, the radius will incrementially reduced by 1 every @radius_reduction time
53
+ # in phase two, the radius is fixed to 1
54
+ def radius_decay(epoch)
55
+ if epoch > @phase_one
56
+ return 1
57
+ else
58
+ if (epoch % @radius_reduction) == 0
59
+ @radius -= 1
60
+ end
61
+ @radius
62
+ end
63
+
64
+ end
65
+
66
+ # two different values will be returned, depending on the phase
67
+ # in phase one, the rate will incrementially reduced everytime this method is called
68
+ # on the switch of phases, the learning rate will be reset and the delta_lr (which signals
69
+ # the decay value of the learning rate) is reset as well
70
+ # in phase two, the newly reset delta_lr rate will be used to incrementially reduce the
71
+ # learning rate
72
+ def learning_rate_decay(epoch)
73
+ if epoch < @phase_one
74
+ @lr -= @delta_lr
75
+ return @lr
76
+ elsif epoch == @phase_one
77
+ @lr = @phase_one_learning_rate
78
+ @delta_lr = (@phase_one_learning_rate - @phase_two_learning_rate)/@phase_two
79
+ return @lr
80
+ else
81
+ @lr -= @delta_lr
82
+ end
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+
@@ -0,0 +1,152 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership.
4
+ # The ASF licenses this file to You under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with
6
+ # the License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ ##############
17
+ # These are the defaults, un-comment them only if you need to change them.
18
+ #
19
+ # You can even have a completely empty file, to assist with maintenance.
20
+ # This file is required, even if empty.
21
+ #
22
+ # The file obtained from 'forrest seed-sample' shows the defaults.
23
+ ##############
24
+
25
+ # Prints out a summary of Forrest settings for this project
26
+ #forrest.echo=true
27
+
28
+ # Project name (used to name .war file)
29
+ #project.name=my-project
30
+
31
+ # Specifies name of Forrest skin to use
32
+ # See list at http://forrest.apache.org/docs/skins.html
33
+ #project.skin=pelt
34
+
35
+ # Descriptors for plugins and skins
36
+ # comma separated list, file:// is supported
37
+ #forrest.skins.descriptors=http://forrest.apache.org/skins/skins.xml,file:///c:/myskins/skins.xml
38
+ #forrest.plugins.descriptors=http://forrest.apache.org/plugins/plugins.xml,http://forrest.apache.org/plugins/whiteboard-plugins.xml
39
+
40
+ ##############
41
+ # behavioural properties
42
+ #project.menu-scheme=tab_attributes
43
+ #project.menu-scheme=directories
44
+
45
+ ##############
46
+ # layout properties
47
+
48
+ # Properties that can be set to override the default locations
49
+ #
50
+ # Parent properties must be set. This usually means uncommenting
51
+ # project.content-dir if any other property using it is uncommented
52
+
53
+ #project.status=status.xml
54
+ #project.content-dir=src/documentation
55
+ #project.raw-content-dir=${project.content-dir}/content
56
+ #project.conf-dir=${project.content-dir}/conf
57
+ #project.sitemap-dir=${project.content-dir}
58
+ #project.xdocs-dir=${project.content-dir}/content/xdocs
59
+ #project.resources-dir=${project.content-dir}/resources
60
+ #project.stylesheets-dir=${project.resources-dir}/stylesheets
61
+ #project.images-dir=${project.resources-dir}/images
62
+ #project.schema-dir=${project.resources-dir}/schema
63
+ #project.skins-dir=${project.content-dir}/skins
64
+ #project.skinconf=${project.content-dir}/skinconf.xml
65
+ #project.lib-dir=${project.content-dir}/lib
66
+ #project.classes-dir=${project.content-dir}/classes
67
+ #project.translations-dir=${project.content-dir}/translations
68
+
69
+ #project.build-dir=${project.home}/build
70
+ #project.site=site
71
+ #project.site-dir=${project.build-dir}/${project.site}
72
+ #project.temp-dir=${project.build-dir}/tmp
73
+
74
+ ##############
75
+ # Cocoon catalog entity resolver properties
76
+ # A local OASIS catalog file to supplement the default Forrest catalog
77
+ #project.catalog=${project.schema-dir}/catalog.xcat
78
+
79
+ ##############
80
+ # validation properties
81
+
82
+ # This set of properties determine if validation is performed
83
+ # Values are inherited unless overridden.
84
+ # e.g. if forrest.validate=false then all others are false unless set to true.
85
+ #forrest.validate=true
86
+ #forrest.validate.xdocs=${forrest.validate}
87
+ #forrest.validate.skinconf=${forrest.validate}
88
+ #forrest.validate.sitemap=${forrest.validate}
89
+ #forrest.validate.stylesheets=${forrest.validate}
90
+ #forrest.validate.skins=${forrest.validate}
91
+ #forrest.validate.skins.stylesheets=${forrest.validate.skins}
92
+
93
+ # *.failonerror=(true|false) - stop when an XML file is invalid
94
+ #forrest.validate.failonerror=true
95
+
96
+ # *.excludes=(pattern) - comma-separated list of path patterns to not validate
97
+ # Note: If you do add an "excludes" list then you need to specify site.xml too.
98
+ # e.g.
99
+ #forrest.validate.xdocs.excludes=site.xml, samples/subdir/**, samples/faq.xml
100
+ #forrest.validate.xdocs.excludes=site.xml
101
+
102
+
103
+ ##############
104
+ # General Forrest properties
105
+
106
+ # The URL to start crawling from
107
+ #project.start-uri=linkmap.html
108
+
109
+ # Set logging level for messages printed to the console
110
+ # (DEBUG, INFO, WARN, ERROR, FATAL_ERROR)
111
+ #project.debuglevel=ERROR
112
+
113
+ # Max memory to allocate to Java
114
+ #forrest.maxmemory=64m
115
+
116
+ # Any other arguments to pass to the JVM. For example, to run on an X-less
117
+ # server, set to -Djava.awt.headless=true
118
+ #forrest.jvmargs=
119
+
120
+ # The bugtracking URL - the issue number will be appended
121
+ # Projects would use their own issue tracker, of course.
122
+ #project.bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
123
+ #project.bugtracking-url=http://issues.apache.org/jira/browse/
124
+
125
+ # The issues list as rss
126
+ #project.issues-rss-url=
127
+
128
+ #I18n Property. Based on the locale request for the browser.
129
+ #If you want to use it for static site then modify the JVM system.language
130
+ # and run once per language
131
+ project.i18n=true
132
+
133
+ # The names of plugins that are required to build the project
134
+ # comma separated list (no spaces)
135
+ # You can request a specific version by appending "-VERSION" to the end of
136
+ # the plugin name. If you exclude a version number, the latest released version
137
+ # will be used. However, be aware that this may be a development version. In
138
+ # a production environment it is recommended that you specify a known working
139
+ # version.
140
+ # Run "forrest available-plugins" for a list of plug-ins currently available.
141
+ project.required.plugins=org.apache.forrest.plugin.output.pdf
142
+
143
+ # codename: Dispatcher
144
+ # Add the following plugins to project.required.plugins:
145
+ #org.apache.forrest.plugin.internal.dispatcher,org.apache.forrest.themes.core,org.apache.forrest.plugin.output.inputModule
146
+
147
+ # Proxy configuration
148
+ # - proxy.user and proxy.password are only needed if the proxy is an authenticated one...
149
+ # proxy.host=myproxy.myhost.com
150
+ # proxy.port=<ProxyPort>
151
+ # proxy.user=<login, if authenticated proxy>
152
+ # proxy.password=<password, if authenticated proxy>