kstrizhov / rdo-xtext

RDO modelling language written in Xtext
0 stars 0 forks source link

Масштабирование графа #11

Closed kstrizhov closed 5 years ago

kstrizhov commented 9 years ago

Реализовать возможность масштабирования графа, возможность вписать граф по ширине в экран интерфейса.

Минимальные размеры вершины графа. Продумать, как и до каких пор вписывать текст в рамку вершины.

kstrizhov commented 9 years ago

@aurusov @bogachev-pa Возник вопрос по масштабированию. Предлагалось при изменении размеров вершин отображать разное количество информации в них. В старом РДО было 2 варианта помимо номера вершины внутри.

Первый: screenshot1

Второй: screenshot2

Вопрос по формату вывода. Я так понимаю, что через / перечислены <уровень вложенности вершины>/<значение, возвращаемое эвристикой>/<стоимость применения правила>. В варианте с максимумом информации еще отображается значение параметра ресурса, видимо его места для данного состояния (через равно) и имя правила. Нужно реализовать аналогичный формат, или что-то изменить? Значения, выводимые через /, вообще кажутся неочевидными. Плюс непонятно значение какого параметра выводить у ресурса, ведь в старом рдо все было однозначно, плагин только для пятнашек, а здесь ситуация другая.

bogachev-pa commented 9 years ago

Насчет уровня вложенности - думаю это просто значение g, т.е. стоимость пройденного пути. Т.е. там формат <g>/<h>/<стоимость применения правила> Значение параметра для общего случая выводить точно не нужно. Имя правила, думаю, стоит вывести, а стоимость его применения как-то с ним объединить.

В общем, если не придумывать ничего дополнительно, то предлагаю такой формат:

<номер_вершины> (<f> = <g> + <h>)
<имя_правила> (<cтоимость_правила>)

Вроде так максимально близко к трассировке, или я путаю?

Edit: путаю. В трассировке <имя правила>(<релевантные ресурсы правила>) = <стоимость>, <f> = <g> + <h>

Тогда, может, так?

<номер_вершины> (<f> = <g> + <h>)
<имя_правила> (<релевантные ресурсы правила>) = <стоимость правила>

Вообще, видеть релевантные ресурсы правила на каждом шаге удобно. Проблема может быть только в том, что вершина графа получится слишком вытянутой по горизонтали. Может, стоит, как-то разнести по строчкам.

Может еще стоит сделать подробно, в духе:

<номер_вершины>
f = <f>, g = <g>, h= <h>
rule = <имя_правила>(<релевантные ресурсы правила>)
cost = <cтомость_правила>

Но вообще первый вариант (компактный) мне больше нравится.

kstrizhov commented 9 years ago

Насчет уровня вложенности - думаю это просто значение g, т.е. стоимость пройденного пути. Т.е. там формат //<стоимость применения правила>

Мда, вчера уже голова не соображала. Надо же мне было так g обозвать =)

<номер_вершины> (<f> = <g> + <h>)

По поводу этого формата, единственное что смущает, что это будет выглядеть как то вроде

(3 = 2 + 1)

Похоже на пример для второго класса, а не на запись функции стоимости пути. Но если сравнивать с лекциями, то конечно глазу привычна такая запись.

По поводу релевантных ресурсов, может взять такой формат:

<имя_правила> (<стоимость правила>) <релевантные ресурсы правила>

Так будет покомпактнее. Но в общем случае, если релевантных ресурсов будет много, то их мне кажется вообще не стоит выводить, чтобы вершина не выглядела непонятно как.

bogachev-pa commented 9 years ago

Похоже на пример для второго класса

Я тоже не в восторге, но лучше я для трассировки не придумал. Если придумаешь что-то интереснее, то заодно поправить и в трассировке.

Но в общем случае, если релевантных ресурсов будет много, то их мне кажется вообще не стоит выводить, чтобы вершина не выглядела непонятно как.

Ты ведь можешь оценивать по объему текста, влезет у тебя какой-то текст или нет? Можно выводить по приоритетам:

номер -> f/g/h -> имя+стоимость правила -> список ресурсов

Что не влезает, не выводишь. Не знаю, насколько трудно это будет реализовать.

Только опять же формат вывода, если он без пояснений, лучше как-то согласовать с трассировкой. Ты, можешь, если релевантные ресурсы не влезают, писать

<имя_правила> = <стоимость_правила>

А если влезают, то, например, так:

<имя_правила> (<рел_рес_1>,
<рел_рес_2>, <рел_рес_3>) = <стоимость_правила>
kstrizhov commented 9 years ago

Я хотел ограничиться тремя характерными размерами, типа маленький, средний и большой, для них менять размеры вершин, а все что между масштабировать зумом либовским, типа как в старом рдо.

aurusov commented 9 years ago

Я за три варианта (Кирилл напомнил про третий) и вывод детальной информации по выбранной вершине

Минимальная нода

<номер_вершины>

Краткая нода

<номер_вершины>
<f> = <g> + <h>

Полная нода

<номер_вершины>
<f> = <g> + <h>
<имя_правила> = <cтоимость_правила>

Детальная информация по выбранной вершине в правом верхнем углу

<номер_вершины>
<f> = <g> + <h>
<имя_правила> (<релевантные ресурсы правила>) = <стоимость правила>

Да, как и предложил Пашеа, можно расширять полную ноду до детальной информации, если влезает. Это зависит от стратегии подсчета минимальной шинины ноды. Насколько я помню, стратегия требовала сначала расчитать минимальную ширину, опираясь на объем текста. А это проиворечит всем нашим рассуждениям об объеме информации в ноде.

kstrizhov commented 9 years ago

Минимальные размеры исходя из текста надо рассчитывать из случая, когда отображается минимум информации, то есть только номер вершины, так? Тогда можно взять 4, максимум 5 знаков, потому что еще по прошлому семестру помню, что когда гонял модели, после минут 20 моделирования на нескольких тысячах, происходит переполнение памяти. Тогда хотя бы это будет какой-то отправной точкой.

По поводу дополнения информацией, если влезает. Мы же в общем случае не знаем, сколько будет релевантных ресурсов. Для одного-двух это ещехвучит неплохо, но если их много, то не получится ли, что проще уже нажать на вершину, чем зумить ее до размеров самого окна? И не совсем понятно, как это реализовать, не отображать ресурсы, но просчитать их размер, и ждать пока они не начнут влезать после команд пользователя zoomIn(), или что-то вроде того?

aurusov commented 9 years ago

Минимальные размеры исходя из текста надо рассчитывать из случая, когда отображается минимум информации, то есть только номер вершины, так?

Да. В минималке надо просто выводить номер. Обновил сообщение выше https://github.com/kstrizhov/rdo-xtext/issues/11#issuecomment-108808682.

Тогда можно взять 4, максимум 5 знаков...

Предлагаю взять 5 знаков 88888.

aurusov commented 9 years ago

По поводу дополнения информацией, если влезает...

Давай начнём с первых трех. По ним вопросы есть ?

kstrizhov commented 9 years ago

Нет, пока все понятно. Тогда начну делать, допишу в записку и перенесу в код.

aurusov commented 9 years ago

ТЗ уже показывал ? Что с листам ?

kstrizhov commented 9 years ago

Еще нет, но готов скинуть текущий вариант записки. По листам пока только идеи в голове по поводу постановки задачи и листа диаграммы классов. Хочу закончить по максимум с запиской и перейти к листам.

aurusov commented 9 years ago

Сбрасывать ничего не надо, разберись с github.io. Создай таску по примеру Оли https://github.com/LeKaitoW/lekaitow.github.io/issues/1.

kstrizhov commented 9 years ago

Ну я это и имел в виду, в прошлом семестре же уже разбирался. Сейчас сделаю.

kstrizhov commented 9 years ago

@aurusov Создал таску для обсуждения, материалы там же. https://github.com/kstrizhov/kstrizhov.github.io/issues/2

aurusov commented 9 years ago

Хорошо, я на неё подписался.

kstrizhov commented 9 years ago

Запилил начальный вариант зума (увеличение). Можно тестить, комментировать. Что бросается в глаза, так это длина третей строки. Выглядит, например, вот так

Перемещение_влево(Фишка1.Дырка) = 1,

она очень длинная, и при вписывании текста по ширине этой строки получаются очень большие вершины и много пустого места в них.

Эта строка формируется при парсинге записей и создании древовидной структуры в либовой части, раньше я ее использовал для вывода подробной информации по вершине по клику. Сейчас видимо стоит вырезать релевантные ресурсы, вижу два подхода:

aurusov commented 9 years ago

Второе, вырезать.