forked from graphstream/gs-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Roadmap
277 lines (256 loc) · 11.2 KB
/
Roadmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
Reorganisation
==============
- Change the GraphReaderListener to take attributes into account.
- Remove the old elasticBox package in ui.layout.
- Where to put the ToolBox ? Is this the right name ?
GraphStream Roadmap
===================
Legend:
* Means done.
+ Almost done.
= Started.
- To do.
~ To figure out.
- Future:
---------
~ Add organisation/community detection methods (in tools ?).
- Release 1.0:
--------------
Doc/Web
- Create a document that gives a view of GraphStream in 5 minutes with good diagrams
and a simple "flow of use". Use the tutorial to do this.
- Review the site with the Google SEO guide.
- Write a GraphStream page in Wikipedia.
- Write a Dynamic Graph page in Wikipedia.
Algorithms
- Remove the too constraining Algorithm and DynamicAlgorithm interfaces.
- Important algorithms
* Min/Max spanning tree.
- Cliques (sous-graphes denses maximaux).
- Inverse d'un graphes (on prend le graphe complet et on enleve les arcs d�j� pr�sents).
- Coloration, nombre chromatique, etc.
- ??
- Add more metrics in tools:
* Maintain the number of connected components (for static and dynamic graphs).
* Modularity.
* diameter
* The APSP subproblem (all-pair shortest paths) needed to compute the
diameter.
* Use the APSP to store the paths (is there an efficient way to
store all this (very numerous) paths?).
- Diameter with dynamic graphs ?
- Combined degree (or scalar property) histogram
- Vertex-vertex degree (or scalar property) correlation
- Average nearest neighbours degree (or scalar property)
- Vertex-edge-vertex correlation
- Extended clustering coefficient
- Assortativity coefficient
- Average distance
- Component statistics
- Reciprocity
- Document the way algorithms can work around the graph (reactively with a GraphListener, dynamically/iteratively,
iteratively in another thread with the GraphListenerProxy, etc.)
I/O
* Add more features in the DGS format :
* Allow to remove attributes.
* Allow to change attributes for the graph.
/ Allow to change the direction of directed edges.
* Related : It is not possible to delete attributes from elements with the
GraphReader/GraphWriter interfaces.
- Add more algorithms:
~ Design a dynamic version of the dot file format ?.
~ It is not possible to change the orientation of an edge with the
GraphReader interface.
- Add a GraphWriterGML that can write "objects" (deserialisation).
* How do GraphReader and GraphWriters should act:
* for the attributes when a change occur: add the attributes ? in this
case how to delete attributes ? Replace the existing set of attributes
by another ? In this case we have to specify the new set each time a
small change occurs. => a solution would be to propose a new API to
treat attribute events separately. It would impose to remove all
change node and edge events...
* for the edge orientation changes. Actually the Graph API allows to
switch an edge direction, but the reader and writers cannot read or
output theses changes in dynamic graphs.
- Add a reader for the Chaco format (already in Go2).
Viewer
/ Allow the SettingsWindow of the GraphPanel to be also embeddable in GUIs
as a panel.
- Could be as a panel or
- as a tool bar.
Done
* Separate GraphStream into a core (graph,I/O,display,basic traversal) and a
tool library.
* Add more metrics in tools:
* Maintain the number of connected components (for static and dynamic graphs).
* Modularity.
* diameter
* The APSP subproblem (all-pair shortest paths) needed to compute the
diameter.
* Use the APSP to store the paths (is there an efficient way to
store all this (very numerous) paths?).
* Add more graph generators:
* Incomplete grids
* Dynamic random graphs with given number of nodes mean degree and nervousness
* Create a multi-graph where multiple arcs are possible between two nodes.
* Be able to draw overlays and "underlays" on the graph display. For example
to show "things" moving along the edges of the graph.
* -> done with sprites and CSS
* Add more graphics settings in GraphicGraph: background of the
panel, default colour, node and edge renderers.
* Add a WriterHelper that follows what happens on the graph with a listener
and output it in a file. The current helper allows only to take snap shots.
* Add tutorials.
* How to build a graph and display it.
* How to read and write graphs.
* How to customise the graph display.
* How to output a graph EPS, SVG or PNG.
= Release 0.5:
--------------
= Update the manual, update the manual, UPDATE THE MANUAL !!!
- Add a CookBook: how do I ...
- links to sites
= screenshots
= tutorials
- Better documentation of the use of Environment.
- Document the new writers and readers.
- Document generators.
- Document Dijkstra.
- Document the new GML Reader:
- Object serialisation and deserialisation
- Dynamic graph features (step, del and chg).
- Orientation of single edges.
- Graphics
- Add more graphic features
- Update the GML reader to convert "graphics" to CSS styles.
- Show in a tutorial how it is simple to add style to elements in DGS.
- Add new text align styles (under, above).
- Allow to specify the length at which a label is cut in the graph viewer.
~ Switch bounds interpolation with the viewerRemote ???
- Reorganise the algorithm package to remove some not needed interfaces.
- Add a dynamic AStar algorithm.
~ Add a dynamic APSP algo ??
- Add a dynamic degree distribution.
- Add a dynamic modularity.
- Add new layout (radial, hierarchical).
* Release 0.4:
--------------
* Mark Graph.getNodeSet() and Graph.getEdgeSet() as deprecated.
* Remove UI dependencies, in order to extract the UIs into independent projects.
* Change the SpringBox algorithm to use a recursive space decomposition -> ElasticBox
* Define interfaces around Graph Node Edge and Element so as to provide
different graph implementations.
* Define a Layout interface, so that several graph layouts can be implemented.
* Added a Welsh/Powell graph colouring algorithm.
* Added an algorithm() method in the Graph class that allows to call
several common algorithms on the current graph instance.
= Update the manual, update the manual, UPDATE THE MANUAL !!!
- Add a CookBook: how do I ...
= Add a FAQ
= COMPLETE TUTORIALS !!!
= Complete the Web Site:
* bibliography
- links to sites
= screenshots
= tutorials
- Better documentation of the use of Environment.
* How to specify style to edges and nodes.
* How to use the GraphViewer.
* How to put a listener in the GraphViewer.
* Default commands of the graph panel.
* The SVG feature.
* Document the new writers and readers.
- Document generators.
- Document Dijkstra.
- Document the new GML Reader:
- Object serialisation and deserialisation
- Dynamic graph features (step, del and chg).
- Orientation of single edges.
- Graphics.
* Document the new GraphWriter interface.
* Document the new DGS format (003).
* Allow loop arcs, no graph class allows this actually !!
~ Do it also for AdjacencyListGraph ??
* Allow the remove operation in iterators, most importantly the EdgeIterator and NodeIterator !
* Partially done : only the Node and Edge iterators of the graph can do this actually.
However the same technique could be applied to other iterators. Would it be useful ?
* Graph renderer enhancements:
* Allow nodes to be drawn as containers for text.
* Allow nodes to have predefined and arbitrary polygon shapes.
* Allow Edges to be a giant arrow/triangle.
* Allow Nodes and Edges to have indicators on them
* Pie charts
* more
* Release 0.3:
--------------
* Rework the GML reader:
* handle the "Object" reading feature (serialisation).
* Read objects composed of other objects.
* handle the graphics block (partial: the arc,polygon,etc. are for another release).
* handle dynamic graphs (add "step", "delnode/deledge" and "chgnode/chgedge").
* allow single edges to be directed whereas the graph is not directed.
* Change the DGS format (DGS003)
* to understand directed mixed with non-directed edges.
* to understand named attributes, avoiding the types.
* Specify the complexity of important methods.
* in the algorithm package.
* in the graph package.
* Add a tape-recorder like panel/options in the ShowGraph application so
that when it displays a dynamic graph, it starts stopped and then is able
to play the graph, pause at any time, or go event-by-event or step-by-step.
* Bellman-ford single source shortest path algorithm.
* Add a Depth-First graph iterator.
* In graph iterators add an option to not take edge orientation into account
(but first respect the orientation)!
* Depth-First iterator,
* Breadth-First iterator.
* An option to allow all attributes to be output in Writers.
* An option to hide arrows ?
* Add a listener for the graph that outputs all events to an output file
DURING the graph manipulation.
* Understand the alpha channel in colour values.
* Allow the GML import to check the "directed" property and read digraphs.
* Be able to display graphs in 3D as well as compute a layout in 3D.
* Generalise the commands in GraphRenderer (rotate, zoom, translate,
screenshot, etc.).
* Draw arrow on directed edges.
* Be able to take screenshots in the 3D view, in BMP, JPG, PNG and the
SVG vector format.
* Add a GraphViz DOT GraphWriter.
* Add a Edge graph reader (format where each line contains two or more node
values separated by spaces).
* Add more generators:
* Full
* Random (with several distributions)
* add support for cross edges in the grid generator for toruses.
* Add ZOOM and PAN and ROTATE operations in the GraphPanel.
* Zoom,
* Pan,
* Rotate,
* Reset settings.
* Add dotted and dashed style to edges.
* Handle icons in GraphicNode.
* Make some classes package-private or protected since they should not be
part of the public GraphStream API. They are here only to make things
work.
* Allow the Swing Graph Renderer to stop rendering frames if nothing in the
representation changes.
* Dijkstra : make a method that returns the set of all possible paths (with
Path objects) from the source to one destination. Warn that it will be a
cpu-consuming method.
* Add a way to catch mouse clicks on nodes in the GraphPanel/GraphViewer
with some sort of listener and act in the AWT/Swing thread or another
thread.
* A listener in the AWT/Swing thread.
* A listener in another thread.
* Release 0.2:
--------------
* Possibility to show arrows in the GraphPanel/GraphViewer when an edge is directed.
* Possibility to take screenshots of the GraphPanel/GraphViewer in SVG, PNG, JPG and BMP.
* Possibility to display a background image in the GraphPanel.GraphViewer.
* Possibility to move nodes in the GraphPanel/GraphViewer with the mouse.
* Conversion of colour values in GraphViewer/GraphPanel from java.awt.Color, colour names, hexadecimal format and HTML and CSS-like formats.
* Ability to read,use,write directed graphs !
* Release 0.1:
--------------
* We did not have a Roadmap at this time :-)