Показать сообщение отдельно
Старый 08.11.2013, 22:55   #1
Hogfather
Platinum Member
 
Аватар для Hogfather
 
Регистрация: 22.07.2010
Адрес: Санкт-Петербург
Сообщений: 3,281
По умолчанию Graphviz - Инструмент для визуализации графов

/
Внимание!
Автор темы совместно с Администрацией портала просит писать в эту тему только относящееся к Graphviz. Благодарности, разговоры о погоде, искромётный юмор будут безжалостно удаляться. Все "чмоки", пожалуйста, во флейме. Надеюсь на понимание.



Пример дерева решений, построенного с помощью Graphviz. Использовалось для иллюстрации в теме.


Код

1. Устанавливаем программу
2. Создаем файл test.dot
Код:
digraph dtree {
	node [fontsize=8, shape=box];

	snake [label="Встретили змею?", style=filled, fillcolor=grey89];
	snakeNo [label="p=0,9 (Нет)\n---------\nЗмею не встретили!", shape=plaintext];
	snakeNo1 [label="p=0,9\n---------\np*2000*50=90000", style=filled, fillcolor=green];
	gender [label="p=0,1 (Да)\n---------\nЭто была девочка?",  shape=plaintext];
	boy [label="p=0,4 (Мальчик)\n---------\nИспугался?", shape=plaintext];
	girl [label="p=0,6 (Девочка)\n---------\nИспугалась?",  shape=plaintext];
	boyRY [label="p=0,1 (Испугался)\n---------\nУбежал в истерике",  shape=plaintext];
	boyRun[label="p=0.1*0.4*0.1=0.004\n---------\np*(-10000)*50=-2000", style=filled, fillcolor=red];
	boyRN [label="p=0,9 (Не испугался)\n---------\nСтал дразнить?",  shape=plaintext];
	boyStripN [label="p=0,5 (Нет)\n---------\nНе стал дразнить",  shape=plaintext];
	boyStripN1 [label="p=0.1*0.4*0.9*0.5=0.018\n---------\np*2000*50=1800", style=filled, fillcolor=green];
	boyStripY [label="p=0,5 (Да)\n---------\nЗмея кусила?",  shape=plaintext];
	boyBiteY [label="p=0,5 (Да)\n---------\nУкусила!",  shape=plaintext];
	boyBiteN [label="p=0,5 (Нет)\n---------\nПобрезговала",  shape=plaintext];
	boyBiteN1 [label="p=0.1*0.4*0.9*0.5*0.5=0.009\n---------\np*2000*50=900", style=filled, fillcolor=green];	
	boyBiteY1 [label="p=0.1*0.4*0.9*0.5*0.5=0.009\n---------\np*(-100000)*50=-45000", style=filled, fillcolor=red];

	girlRY [label="p=0,9 (Испугалась)\n---------\nУбежала в истерике",  shape=plaintext];
	girlRun[label="p=0.1*0.6*0.9=0.054\n---------\np*(-10000)*50=-27000", style=filled, fillcolor=red];
	girlRN [label="p=0,1 (Не испугалась)\n---------\nСтала дразнить?",  shape=plaintext];
	girlStripN [label="p=0,5 (Нет)\n---------\nНе стала дразнить",  shape=plaintext];
	girlStripN1 [label="p=0.1*0.6*0.1*0.5=0.003\n---------\np*2000*50=300", style=filled, fillcolor=green];
	girlStripY [label="p=0,5 (Да)\n---------\nЗмея кусила?",  shape=plaintext];
	girlBiteY [label="p=0,5 (Да)\n---------\nУкусила!",  shape=plaintext];
	girlBiteN [label="p=0,5 (Нет)\n---------\nПобрезговала!",  shape=plaintext];
	girlBiteN1 [label="p=0.1*0.6*0.1*0.5*0.5=0.0015\n---------\np*2000*50=150", style=filled, fillcolor=green];	
	girlBiteY1 [label="p=0.1*0.4*0.9*0.5*0.5=0.0015\n---------\np*(-100000)*50=-7500", style=filled, fillcolor=red];

	snake -> snakeNo [arrowhead=none];
	snakeNo -> snakeNo1 [arrowhead=none];
	snake -> gender [arrowhead=none];
	gender -> boy [arrowhead=none];
	gender -> girl [arrowhead=none];
	boy -> boyRY [arrowhead=none];
	boyRY -> boyRun [arrowhead=none];
	boy -> boyRN [arrowhead=none];
	boyRN -> boyStripN [arrowhead=none];
	boyRN -> boyStripY [arrowhead=none];
	boyStripY -> boyBiteY [arrowhead=none];	
	boyStripY -> boyBiteN [arrowhead=none];
	boyBiteN -> boyBiteN1 [arrowhead=none];	
	boyStripN -> boyStripN1 [arrowhead=none];
	boyBiteY -> boyBiteY1 [arrowhead=none];

	girlRY -> girlRun [arrowhead=none];
	girl -> girlRN [arrowhead=none];
	girl -> girlRY [arrowhead=none];
	girlRN -> girlStripN [arrowhead=none];
	girlRN -> girlStripY [arrowhead=none];
	girlStripY -> girlBiteY [arrowhead=none];	
	girlStripY -> girlBiteN [arrowhead=none];
	girlBiteN -> girlBiteN1 [arrowhead=none];	
	girlStripN -> girlStripN1 [arrowhead=none];
	girlBiteY -> girlBiteY1 [arrowhead=none];		
}
Как видите, язык достаточно простой, если кому-то нужно готов создать отдельную тему по этому.

3. В каталоге, где расположен файл запускаем команду dot test.dot -Tpng -o test.png
4. ...
5. PROFIT!



Подробная инструкция на русском языке

Если есть вопросы, готов попробовать ответить.
---------
DNF is not an option
Hogfather вне форума   Ответить с цитированием
Реклама