///////////////////////////////////////////////////////////////////////////////
//
//
#include "scp_keynodes.scsy"
#include "../seb/planimetry.scsy"
#include "im_keynodes.scsy"
procedure(exec_command,
[[
"main window"= "/etc/im_keynode/main window";
ch_comm = "/etc/im_keynode/child_command";
$errors_found = /"Неверно заданы аргументы."/;
sheet_type = "/proc/agents/shell/keynode/SCgSheet";
layout =c= /"logical"/;
p_sheet_title =c= /"Результатыверификации"/;
1_, 2_;
]],
[{
notfound,main_wnd,show_set,comm,p2,s,cmd,
arc,a,arc2,
resultall,
command,
segment,scg_el,wnd,sheet,set_scg_el
}],
{[
1_: in_: set_scg_el,
2_: in_: sheet,
3_: in_: cmd
]}
)
genEl([
1_: assign_: node_:const_:resultall
])
searchElStr3([1_: fixed_: "main window",
2_: assign_: a,
3_: assign_: main_wnd],,notfound)
sys_get_location([1_: fixed_: main_wnd, 2_: assign_: segment])
sys_set_default_segment([1_: fixed_: segment])
genEl([
1_: assign_: node_:const_:command
])
genElStr3([
1_: fixed_: ch_comm,
2_: assign_: arc_:const_: pos_: arc,
3_: fixed_: command
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: ch_comm
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: command
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: arc
])
///////////////////////////////////////////////
// создание параметров команды
//
// первыйпараметр
genElStr5([1_: fixed_: command,
2_: assign_: const_: actual_: pos_: temporary_: arc,
3_: fixed_: sheet,
4_: assign_: const_: actual_: pos_: temporary_: arc2,
5_: fixed_: 1_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: sheet
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: 1_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_:const_: pos_: a,
3_: fixed_: arc2
])
// генерация узла связки второго параметра команды
genElStr5([1_: fixed_: command,
2_: assign_: const_: actual_: pos_: temporary_: arc,
3_: assign_: const_: node_: p2,
4_: assign_: const_: actual_: pos_: temporary_: arc2,
5_: fixed_: 2_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: p2
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: 2_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc2
])
// генерация второго параметра
genElStr5([1_: fixed_: p2,
2_: assign_: const_: actual_: pos_: temporary_: arc,
3_: assign_: const_: node_: s,
4_: assign_: const_: actual_: pos_: temporary_: arc2,
5_: fixed_: 1_
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: s
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc2
])
// формируемдочернююкоманду
genElStr5([1_: fixed_: cmd,
2_: assign_: const_: actual_: pos_: temporary_: arc,
3_: assign_: const_: node_: comm,
4_: assign_: const_: actual_: pos_: temporary_: arc2,
5_: fixed_: s
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: comm
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc2
])
genElStr3([
1_: fixed_: s,
2_: assign_: arc_: const_: pos_: arc,
3_: fixed_: comm
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
genElStr3([
1_: fixed_: s,
2_: assign_: arc_: const_: pos_: arc,
3_: fixed_: cmd
])
genElStr3([
1_: fixed_: resultall,
2_: assign_: arc_: const_: pos_: a,
3_: fixed_: arc
])
varAssign([1_:assign_:wnd,2_:fixed_:main_wnd],ok_msg,ok_msg)
// если произошла ошибочная ситуация
label(err_msg)
genElStr3([1_: fixed_:resultall,
2_: assign_: const_: temporary_: actual_: pos_: a,
3_: fixed_: $errors_found])
ui_sheet_create([ 1_: assign_: const_: node_: wnd,
2_: fixed_: sheet_type,
3_: fixed_: p_sheet_title,
4_: fixed_: layout])
printEl([1_: resultall])
// выводрезультата
label(ok_msg)
ui_send([1_: fixed_: wnd, 2_: fixed_: resultall])
eraseEl([1_:fixed_: f_: resultall])
return()
end
Примером пользовательской эффекторной операции (память-пользователь) является функция setAlbumList, которая обрабатывает ключевой узел интерфейсной команды для отображения идентификаторов выходных параметров в элемент управления:
void pluginSheet::setAlbumList(sc_addr addr)
{
CArray<sc_string, sc_string&> albumList;
albumList.FreeExtra();
Shell* shell = Shell::getInstance();
sc_session* s = shell->getSession();
sc_iterator* it = s->create_iterator(sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true);
for(; !it->is_over(); it->next())
{
sc_addr album_addr = it->value(2);
sc_string str = s->get_idtf(album_addr);
albumList.Add(str);
}
m_pView->UpdateListBox2(albumList);
}
4.3 Верификация и отладка пользовательского интерфейса
Для реализации и тестирования базы данных использовался SRS Studio. Для написания кода операций использовал Notepad++, интерфейс реализован по средствам библиотек MFC на языке программирования С++, верификация и тестирование с помощью SRS Studio, Microsoft Visual Studio .NET 2003 илога pm вкоманднойстроке.
4.4 Спецификация разработанного пользовательского интерфейса, сертификация разработанных ip-компонентов
5. Интеграция разработанной системы с другими системами
Интеллектуальная справочная система может быть интегрирована с другими система, работающими в данной предметной области.
Кроме этого могут быть заимствованы операции и ip-компоненты для качественного улучшения системы.
Интеграция позволит расширить как базу знаний, так и перечень реализуемых операций, что сделает систему еще более востребованной для конечного пользователя.
Но вместе с тем необходимо оценить затраты необходимые для интеграции (приведение базы знаний к одинаковым ключевым элементам, использование одинаковых конструкций, соответствующая реализация определенных операций), и на основе анализа выбрать наилучшую стратегию.
С целью облегчения процесса интеграции необходимо разрабатывать ip-компоненты всех подсистем интеллектуальной системы (базы знаний, машины обработки знания и пользовательского интерфейса), которые не зависят от реализации конкретной базы знаний.
Для полноценного функционирования справочной системы и достижения главной цели – способность системы отвечать на самые нетривиальные вопросы и привлекать широкие массы пользователей, нужно:
Дальнейшие развитие базы знаний, добавление новых предметных узлов и ключевых элементов. Кроме этого база должна пополняться и расширяться новыми знаниями, которые будут генерироваться при работе операций.
Развитие машины обработки заключается в увеличении количества классов задач, которые будет решать данная интеллектуальная справочная система.
Пользовательский интерфейс прикладной системы должен давать возможность работать как с информацией, представленной на языках, являющихся подмножествами языка SC, так и на естественном языке.
В первую очередь необходимо уделить большое внимание естественно-языковому интерфейсу, так как SCg-конструкции, которые система генерирует на данный момент, являются слишком громоздкими и не удобными для восприятия. Ответ на формальном языке представляет собой дополнительный барьер для понимания информации и делает систему не пригодной для пользователей, не знакомых с теорией множеств и языком SC.
Пользовательский интерфейс должен давать возможность пользователю сосредоточиться на постановке задачи, а не на способе её достижения. Время и усилия, которые необходимы пользователю для достижения цели, должны сводиться к минимуму.
Следует уделить внимание «дружелюбности» интерфейса. Необходимо стремиться к тому, чтобы даже не опытному пользователю было понятно, как работать с системой. Время, которое необходимо для освоения навыков работы со средой интеллектуальной справочной системы должно сводиться к минимуму.
7. Вклад в развитие семантических технологий проектирования интеллектуальных систем
7.1 Список выявленных ошибок среды проектирования интеллектуальных систем
После закрытия всех окон SRS-Studio, в системе остаётся незавершенный процесс, который не даёт запуститься собранной системе или ещё одной копии SRS-Studio.
При загрузке sc-элементов в память не загружаются дуги.
7.2 Список предложений по совершенствованию среды проектирования интеллектуальных систем
Доработка руководства пользователя по операциям на языке SCP.
Разработка инструментария для написания scp-программ (минимум отладчика).
Написание новых scp-функций (например, переход по паре).
Исправление указанных ошибок.
Создание ip-компонентов базы знаний, машины обработки знаний, пользовательского интерфейса.
Отладка текущего инструментария для уменьшения используемых ресурсов.
7.3 Список предложений по совершенствованию семантических технологий проектирования интеллектуальных систем
Необходима разработка инструментария качественно нового уровня (предложения по развитию представлены в разделе 7.3.), так как работа с инструментарием на данном этапе затрудняет использование данной технологии.
Изучение в рамках учебного процесса студентами теоретических основ, необходимых для использования и внедрения данной технологии (теория множеств, модели представления знаний, язык программирования scp и др.)
Так же важным этапом в развитии технологии является создание ip-компонентов, задача которых упростить и ускорить процесс разработка за счёт повторного использования каких-либо элементов интеллектуальной системы. Важным является создание ip-компонентов всех подсистем: базы знаний, машины обработки знаний, пользовательского интерфейса.
7.4 Создание и использование ip-компонентов
Созданная БЗ, набор операций и отдельные элементы пользовательского интерфейса могут быть использованы в интеллектуальных справочных системах смежных областей, в качестве ip-компонентов. Что позволит ускорить их разработку, расширить функционал. Таким образом с бесконечным числом интеграций с другими интеллектуальными справочными системами, получится система, которая будет хранить бесконечное количество информации, отвечать на любые поставленные нетривиальные вопросы, а общение между пользователем и системой будет происходить посредством дружелюбного пользовательского интерфейса.
1. Режим доступа: http://www.skilfully.org/18.08.2008/1. - Дата доступа: 21.12.2008.
2. Режим доступа: http://www.encyclopedia.ru/news/enc/detail/2321/. – Дата доступа: 21.12.2008.
3. Справочно-информационный портал Википедия. - Режим доступа: http://ru.wikipedia.org/wiki/Семантическая_паутина. - Дата доступа: 20.12.2008.
4. The Semantic Web. Scientific American, 17 мая 2001, русский перевод: Семантическая Сеть.
5. Справочно-информационный портал Википедия. - Режим доступа: http://ru.wikipedia.org/wiki/Семантическая_сеть. - Дата доступа: 21.12.2008.
6. http://www.trizland.ru/trizba.php?id=186. – Дата доступа: 21.12.2008.
7. Руководство разработчика семантической справочной системы, Минск, 2008.
8. Руководство по программированию на языке SCP, Минск, 2005.