Systemy ekpertowe

0

Ostatnio dużo powstaje środowisk programistycznych dla platformy NET. Znalazłem np implementację fortrana. Czy istnieje środowisko i język do tworzenia systemów ekspertowych? Tj. systemów w których tworzy się reguły, można wykorzystać możliwości programowania obiektowego i są zaimplementowane procedury wnioskujące?

0

Obecnie zgłębiam tajniki w C#. Zajmuję się sztuczną inteligencją. Pracowałem w różnych środowiskach do tworzenia systemów ekspertowych.

  1. Kappa PC to było fajne środowisko. Łatwo tworzyło się reguły. Można było robić klasy, a reguły mogły dotyczyć np. tylko obiektów danej klasy. Duża możliwość sterowania wnioskowaniem (w przód, w tył, mieszane) (cała baza wiedzy, tylko część w przód, a pozostała w tył). Jednak nie jest on wspierany a ostatnia jego kompilacja to 16 bitowa pod DOS. Był to licencjonowany projekt, ale obecnie nie jest dostępny. Jednak bardzo ciekawy projekt. Miał też możliwość tworzenia graficznego interfejsu użytkownika.
  2. Multilogic Exys dość fajne narzędzie. Jednak brakuje mu możliwości budowy GUI jak w tradycyjnych środowiskach programowania. Niewielkie mozliwości poszerzenia jego funkcjonalności (podobnie jak Kappa PC). Kiepski interfejs do baz danych (podobnie jak Kappa PC). Exsys to licencjonowany projekt.
  3. CLIPS to otwarty projekt. Nie posiada GUI (zatem tu musiałaby współpracować wartwa aplikacji z GUI np. stworzona w C# lub C++). Dość trudny język do tworzenia baz wiedzy (dużooo nawiasów). Wnioskowanie ma tylko w przód.

Ale każdy z nich miał jakieś wady.Robię taki projekt zastosowania systemów ekspertowych w technice. Zastanawiałem się nad stworzeniem swojego środowiska do tworzenia systemów ekspertowych. Jednak jak stworzyć nowe klasy, które użytkownik będzie chciał zdefiniować jak już projekt jest skompilowany?
Myślałem o pakietach wieloplikowych. Użytkownik miałby okienka w któryh definiowałby klasy, reguły, instancje obiektów, ustalałby fakty czyli pola klas. Ten GUI tworzyłby poprawny kod C#. Można by go w tle skompilować kompilatorem z Net Framework csc.exe. Następnie tworzyć instancje klas. Zaimplementować algorytmy wnioskowania. Ale jeszcze tego nie próbowałem. Nie wiem czy to możliwe do realizacji.
Myślałem też o znalezieniu języka, który maksymalnie wspomógłby w realizacji tego zadania.

Chodzi o to, aby użytkownik, który nie jest programistą mógł zdefiniować struktury klas, reguły jako metody posiadające część warunkową i część akcji np. w postaci graficznej. Słyszałem też o pakietach dynamicznych. Czy ktoś z Was robił coś podobnego? Dajcie znać.

0

Hmm... Niewielkie mam doświadczenie, ale:
Czy SE w ogóle są kompilowane?
Czy C# byłby dobrym wyborem do opisu operacji tego typu?
Ja stawiam dwa razy na nie.

0

Szkielet systemu ekspertowego jest napisany w jakimś języku zazwyczaj kompilowalnym. Jego baza wiedzy, którą tworzy użytkownik może być interpretowana (jeśli jest ona w postaci pliku tekstowego). Na pewno nie jest to typowe zastosowanie C#.

0

No właśnie - to co klepie użytkownik, jest raczej interpretowane, tak to pamiętam z PC-Shella. Zresztą baza wiedzy to tylko część kodu.

I teraz pytanie - o co chodzi? Napisać "interpreter" C#, który wprowadzony przez użytkownika kod skompiluje i w locie wykona jak system ekspercki?
C# jest bardzo rozbudowany, zrobienie tego nie byłoby łatwe. Poza tym to raczej nie jest dobry język do implementowania mechanizmów wnioskowania... Jednych rzeczy w nim jest zbyt wiele, innych zbyt mało, IMHO sporo energii poszłoby w coś bez sensu.

Lepiej chyba by opracować inny język, który byłby bardziej logiczny/funkcyjny, ale zgodny z CLR, mógłby dzięki temu korzystać z klas Frameworka, łatwiej by się tworzyło GUI czy obsługiwało bazy danych...
Ale poza tym: http://www.codeproject.com/KB/recipes/FuzzyAdvisor.aspx nigdy nie słyszałem o wykonaniu czegoś podobnego w .NET.

0

Interpretera C# pisać nie trzeba, kompilator csc.exe jest ZAWSZE dostępny we Frameworku.
Natomiast własny kompilator CLIPSa lub podobnego języka, kompilujący do CIL byłby "fajny", ale własny system ekspercki to raczej duużo roboty..

0
Azarien napisał(a)

Interpretera C# pisać nie trzeba, kompilator csc.exe jest ZAWSZE dostępny we Frameworku.

Wiesz co to jest cudzysłów i po co się go używa?
"Interpreter" w sensie takim, żeby wyglądało to jak inne SE i użytkownik o tym nie wiedział, nie widział tego, wiadomo, że w tle musiałaby być kompilacja.
A tworzenie KB w C# może byłoby chyba dość karkołomne - czym ona miałaby być? Klasą? A reguły czym? const stringami? Nadmiarowy kod i efekty mizerne...

0

Szczerze mówiąc myślałem o tym, że istnieje jakiś już język, który by się do tego nadawał. Są zaimplementowane języki jak Fortran, Python.
Koncepcja użycia kompilatora csc.exe nie jest całkiem zła. Gdyby aplikacja okienkowa otrzymała informacje od użytkownika na temat struktur klas itp. i stworzyła kod źródłowy w tle, a następnie wywołała kompilator. Użytkownik nic o tym by nie wiedział. Jeszcze do tego nie dotarłem ale w Net są takie rzeczy jak pakiety wieloplikowe (gdzie część pakietu można dostarczyć poźniej lub ściągnąć z sieci Internet). Też słyszałem o pakietach dynamicznych. Ale nie praktykowałem tego.
Co do języków to Kappa PC była napisana w zwykłym C, podobnie CLIPS.
Ja bym widział tak:
reguła to specjalna metoda, która posiada część warunkową i część akcji,
klasy używane byłyby jak w programowaniu obiektowym (tak zrobili w Kappa PC). Obiekty mogą należeć do określonej klasy, reguły też.
Wnioskowanie realizować można by za pomocą metody zawartej np. w klasie głównej (która zawsze jest dostępna).
Jakie są wasze opinie?

0

Można by też napisać translator jakiegoś znanego języka do SE na C# i kompilować :)

0

Platforma NET jest o tyle ciekawa, że można tworzyć pakiety w różnych językach Net np. C#, C++ / CLI / VB. Można tworzyć w nich biblioteki i korzystać w programach napisanych w innych (zakładając, że będziemy korzystać z typów CTS - wspólnego systemów typów w argumentach metod, wartości zwracanych, publicznych pól i właściwości).
Jest strona z językami dla platformy NET http://www.dotnetlanguages.net/DNL/Resources.aspx.
Jeśli ktoś zna jeszcze inne to proszę o informację. Znalazłem tam język F#. Podobno jest funkcyjny. Nie znam go kompletnie. Jego strona to http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/default.aspx. Czy ktoś go z Was używał? Czy nadawałby się do tego zadania? Ten język jest już dodany do Visual Studio 2010 beta. Nie wiem czy warto się nim bawić.
Jeśli chodzi o klasyczne interpretery czy tworzyliście coś takiego?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0