Мета взаємодії людського суспільства з комп'ютерами - зробити потужні програми легкими у використанні, зберігаючи їхній повний потенціал.
Новим жанром в індустрії програмного забезпечення стали програми, які можуть мігрувати від однієї машини до іншої, зберігаючи свій інтерфейс користувача і контекст виконання, зупиняти своє виконання перед міграцією і поновлювати його від того місця, де була зроблена зупинка перед міграцією, зберігаючи при цьому свій внутрішній стан під час переміщення. Такі програми не прив'язуються до одного користувача або до однієї машини, а можуть блукати вільно по мережі, надаючи сервіси користувачам, збираючи інформацію, і взаємодіяти з іншими програмами такого роду. Після переміщення, комп'ютер, на якому раніше знаходилась така програма, може припинити роботу без жодного впливу на її подальшу роботу, тобто таку програму з деяким припущенням можна називати вже не комп'ютерною, а мережною. Такий тип програм отримав назву міграційні програми (migratory applications), або мобільні агенти.
Міграція програм є корисною в контексті співробітництва, яке базується на теорії агентної взаємодії.
Наприклад:
1. Програми, які слідують за користувачем фізично: з дому на місце роботи і назад додому;
2.Програми, які обслуговують групу людей, мігруючи до комп'ютера кожного з них по черзі (щось на зразок диспетчера або секретаря);
3. Програми, які взаємодіють з людьми для задовільнення потреб певної особи (деякого фізичного агента).
Крім того, дослідження можливостей агентного підходу до програмування з недавнього часу розгорнулися в США, коли NASA (National Aeronautic Space Administration) оголосила своєю метою встановлення віртуальнюї присутності в космосі шляхом використання зондів-роботів. Справа в тому, що освоєння та дослідження космосу, а саме складність просторового довкілля вимагають таких машин, які водночас були б і механічними виконавцями команд, і водночас могли б автоматично, на далекій відстані від Землі, виконувати складні обчислення і приймати рішення в критичних ситуаціях автономно, не очікуючи команд, яка можуть просто запізнитися. Недавній зсув в фінансуванні проектів освоєння космічного простору від багатомільярдних вкладень, орієнтованих на великі екіпажі космонавтів, до дешевших, націлених на багато меншу кількість членів екіпажу, став вимагати створення космічних агрегатів, що контролюються інтелектуальними частково-незалежними об'єктами, відомими, як автономні агенти. І це природно, тому що великі дистанцій і затримки часу, які пов'язані з роботами в космосі, роблять неможливим керування роботами безпосередньо з Землі. Нові методи автономного управління зондами надають можливість подолати між іншими речами проблеми великих відстаней і часу.
Поточні дослідження встановлюють, як контролювати взаємодію між такими агентами, їхніми внутрішніми під-системами і людиною. Регульована автономія є цікавою, коли маємо справу з системами, які повинні функціонувати автономно протягом декількох років, або, наприклад, коли необхідно, щоб система сама прийняла рішення про припинення своєї діяльності без отримання інструкцій з боку оператора-людини.
В цій роботі буде описано загальні принципи функціонування мобільних агентів (мігруючих програм), а також буде розглянуто, як міграція програми може бути здійснена на рівні мови/середовища програмування.
Ця відмінність робить мобільних агентів особливо корисними. У протилежність системам з мобільним кодом, наприклад аплетам Java, які містять послідовність команд, і фактично мають тільки мобільну логіку, або традиційним розподіленим системам, що використовують віддалений виклик процедур (RPC) і мають тільки мобільні дані, системи мобільних агентів поєднують в собі як мобільність коду, так і мобільність даних.
Процедури Obliq, подібно іншим даним, мають значення, яким можна маніпулювати і передавати. Значення процедури зветься припиненням, воно складається з тексту процедури та таблиці значень для глобальних змінних цієї процедури.
На відміну від механізму передачі даних по мережі, в Obliq існує примітив, який дозволяє дозволяє передати весь граф даних, як змінних, так і незмінних. Це необхідно при переміщені всього інтерфейсу користувача на інший хост. В графі даних можуть міститися дані про положення та параметри всіх вікон користувацького інтерфейсу. Після одержання такої копії графа даних, на машині, куди мігрує програма, проінтерпретувавши цей граф можна миттєво відновити зовнішній вигляд інтерфейсу користувача, “яким його залишили”.
Агент в Obliq- це такий програмний продукт, яке може “стрибнути” по мережі з одного комп'ютера на інший.
Портфель(Suitcase) - це ті дані, які агент переносить із собою при міграції з сайту на сайт. В ньому міститься “довгострокова” пам'ять агента. Це може бути список машин, які вже були відвідані, завдання, які треба виконати на кожному комп'ютері, і результати виконання цих завдань.
Бріфінг(Briefing) - дані, які агент отримує на кожній машині при вході. Може включати пораду для агента (наприклад, "дуже зайнятий тепер, спробуйте піти на інший сайт"), і будь-які дані, які описують цей сайт, як то локальна файлова система і наявні бази даних.
Сервер агента(Agent Server) - для даного сайта це програма, яка приймає код агента по мережі, виконує його і забезпечує агента локальними даними.
Команда стрибка(Hop instruction) - використовується агентами, щоб пересунутися з одної машини до наступної. Ця команда має, як параметри, сервер агента, код агента, і його Suitcase. Агент і Suitcase відсилаються до сервера агента для виконання.
Нарешті, агент - це визначений користувачем код, Suitcase та Briefcase. Всі потреби агентів в даних повинні бути задоволені тим, що знаходиться в чемодані або в параметрах Бріфінга. На кожному сайті, агент перевіряє Briefcase і чемодан, щоб з'ясувати свою наступну поведінку. Після виконання деяких завдань на одному сайті, звичайно виконується команда стрибка для пересунення до наступної машини.
Якщо агент має інтерфейс користувача, то перед стрибком виконується копіювання відповідного графу даних, зберігається в чемодані і відновлюється на новому місці.
Як вже було сказано, агент визначається кодом, Suitcase'ом та Briefcase'ом: Suitcase мандрує з агентом від сайту до сайту, в той час, як свіжий Briefcase забезпечується в кожному новому місці сервером агента. Агенти пересуваються від машини до машини за допомогою виконання команди стрибка:
let rec agent =
proc(siutcase, briefcase)
(* працювати на поточному сайті *)
(* вирішити, куди піти далі *)
hop(nextSite, agent, siutcase);
(* виконати agent на nextSite з siutcase *)
end;
Як бачимо, агент являє собою процедуру, яка має два параметри. Siutcase і Briefcase - це довільні дані, в якості яких зручно використовувати об'єкти. Кожний агент відповідає за зміст чемодана, і кожний сервер агента відповідає за зміст briefcase'а. Сервери агентів є простими обчислювальними програмами-серверами, і їх головним завданням є виконання агентів і забезпечення їх відповідними інструкціями. Ще однією функцією сервера агента може бути перевірка “вірчих грамот” агента, тобто його ідентифікація.
Visual Obliq - це середовище для швидкого створення програм з інтерфейсом користувача. Воно складається з:
* Інтерактивного конструктора, який дозволяє швидко створити і запрограмувати інтерфейс користувача, при чому генерація коду на Obliq відбувається автоматично.
* Системи run-time підтримки, яка складається з бібліотек і мережевих сервісів.
Примусити програму мігрувати до нового сайту можна за допомогою виконання команди переміщення. Для переміщення програми на інший сайт треба виконати одну з наступних команд:
* MigrateTo(Host)
* MigrateToServer(ServerName, Host)
Перша команда переміщує програму до сервера агента по замовчанню під назвою VOMigrate, на машину з назвою Host. VOMigrate продовжує виконання програми з того місця, де воно було перерване, і не забезпечує агента новими інструкціями. Таке переміщення є достатнім для найпростішого переміщення програми.
Друга команда примушує агента мігрувати до визначеного сервера агента під назвою ServerNarne, на машині з назвою Host. У обох випадках сервер агента запускається користувачем, який отримав переміщеного агента.
Команда переміщення повертає значення true в тому випадку, якщо агент успішно перемістився. В іншому випадку повертається значення false. В разі успішного мігрування виконання локального екземпляру агента завершується одразу після надходження повідомлення, інтерфейс користувача і стан виконання програми знищується. У випадку невдалої спроби переміщення, агент продовжує виконуватися неначе нічого не сталося.
Сервер агента - це розширений інтерпретатор Visual Obliq, який включено в середовище розробки мобільних агентів.
Визначені користувачем сервери агента створюються за допомогою розширення сервера агента по умовчанню, щоб забезпечити агента специфічними інструкціями, наприклад, здійснити контроль доступу. Щоб бути корисним, серверу агента потрібно мати дружній до користувача інтерфейс, щоб допомогти користувачеві відслідковувати і регулювати активність міграційних програм. Наприклад, користувач міг би зумовити: "Я дозволяю працювати на цій машині тільки програмам типу X"; "Я повернусь в час Y". Визначений користувачем сервер агентів припускає ідентифікувати прибулих агентів, а також здійснювати шифрування.