Strona 1 z 1

System przydziału zadań dla administratorów

: 13 lipca 2013, 10:23
autor: Bastian
Cześć.

Jestem w trakcie pisania aplikacji, dla mojego zespołu adminów, która to aplikacja listuje zadania spływające do Nas z różnych zakątków korporacyjnego IT.

Przymierzam się, również do implementacji mechanizmu, który będzie wskazywał adminowi, którym zadaniem w kolejce ma się zająć, na podstawie różnych parametrów tego zadania. Wszystkie parametry zadania są oczywiście dla programu dostępne.

Chcę opracować jakiś sensowny algorytm do tego. Oczywiście mogę wykorzystać do tego po prostu algorytm drzewa i opierać się na instrukcjach warunkowych, ale chciałem podejść do tego w bardziej profesjonalny sposób.

Myślałem zatem nad prostą implementacją systemu ekspertowego (o ile takie systemy w ogóle można dzielić na "proste" i "skomplikowane"). Jednak nie posiadam niestety przygotowania w tym temacie (wykłady w AI, rozbudowana algebra itp.). Moja wiedza ogranicza się tylko do ogólnych założeń takiego systemu, które znalazłem w sieci. Czy ktoś z Was zna jakieś przejrzyste poradniki, krok po kroku jak napisać taki system? Jakiekolwiek: odnośniki czy książki. Chodzi o to, to żeby na przykładzie takiego dokumentu, mógł sobie ten system wdrożyć w mojej aplikacji.

Dodam tylko, iż taki system nie będzie miał mechanizmu nauki, według danych, które do niego są wprowadzane. Dane te są na sztywno wprowadzone do systemu a nie dynamicznie. Mam nadzieję, że napisałem to zrozumiale.

: 15 lipca 2013, 16:16
autor: derekdx
Bastian pisze:Czy ktoś z Was zna jakieś przejrzyste poradniki, krok po kroku jak napisać taki system?
Mam nadzieje, że chodzi Ci jak napisać algorytm nie system.

Nie wiem jakie wartości, które decydują o priorytecie realizacji będą miały zgłoszenia ale możesz zastosować średnią ważoną aby określić, które zgłoszenie jest pilniejsze. Jedyne co przychodzi mi teraz do głowy.

: 15 lipca 2013, 18:15
autor: LordRuthwen
Ambitnie, w czym chcesz to pisać? Bo najlepszym wyjściem byłby LISP lub Prolog wg mnie, najszybciej działa na podstawie bazy wiedzy, tylko tą też trzeba zbudować.

: 19 lipca 2013, 14:40
autor: Czocher
Najbardziej przejrzyste a jednocześnie bardzo potężne systemy ekspertowe robi się z pomocą sieci bayesowskich. W ogólnej postaci sieć bayesowska to po prostu graf którego wierzchołkami są pewnie okoliczności/zdarzenia etc a krawędzie to prawdopodobieństwa i wówczas przykładowo jeżeli graf posiada trzy wierzchołki A, B i C i punkt A łączy się z punktem B i C (takie proste drzewo z trzema wierzchołkami), to z grafu można wywnioskować, że zajście zdarzenia A wpływa jakoś na wystąpienie zdarzeń B i C. Jeżeli określilibyśmy jeszcze prawdopodobieństwa na krawędziach, to mielibyśmy dokładny obraz owej zależności. Jak widzimy wszystko tutaj sprowadza się do prawdopodobieństwa warunkowego, dzięki czemu jak wspomniałem jest dosyć przejrzyste, niestety sieci bayesowskie są dosyć trudne w automatycznym uczeniu, natomiast doskonałe do uczenia przez człowieka (wystarczy stworzyć graf wydarzeń i zależności między nimi).

Odnośnie narzędzi - jest sporo bardzo dobrych bibliotek szczególnie od Javy, niektóre mają nawet graficzne interfejsy do konfiguracji sieci itp., co jest całkiem fajne na początek. Jestem również przekonany, że nawet samodzielne zaprogramowanie biblioteki do tego nie stanowiłoby większego problemu (no może poza uczeniem sieci).

A co do wykorzystania tego w podanym przez ciebie systemie:
Tworzysz sieć ze zdarzeniami typu:
  • Priorytet zdarzenia ustawiony na wysoki
  • W opisie występuje zdanie "zostaniesz zwolniony jeżeli nie będzie to gotowe na"
  • Przyjęcie zgłoszenia
  • Nie przyjęcie zgłoszenia
Ustawiasz znaną ci wiedzę, czyli jeżeli dostaniesz wiadomość z priorytetem niskim, ale z podanym wyżej zdaniem w opisie to raczej wiadomo, że prawdopodobieństwo przyjęcia zgłoszenia byłoby bliskie 1.0, natomiast wysoki priorytet również kazałby zwracać się ku przyjęciu ale z mniejszym prawdopodobieństwem, np 0.4.

Sieć mogłaby następnie przekazywać zdarzenia do kolejki priorytetowej, która priorytet ustanawiałaby na podstawie sumy prawdopodobieństw, które doprowadziło do przyjęcia zgłoszenia itp. Tutaj już wszystko zależy od ciebie.

Z doświadczenia wiem natomiast, że sieć takową wykorzystuje przykładowo Ministerstwo Obrony Stanów Zjednoczonych do wykrywania, czy kontenery wwożone na teren Stanów Zjednoczonych nie zawierają niebezpiecznych radioaktywnych substancji. Prosty licznik Geigera-Müllera nie wystarcza w tej sytuacji gdyż zarówno banany jak i muszle klozetowe (porcelana) niemalże świecą w ciemności a niebezpieczne raczej nie są (choć amerykańskie licea i muszle klozetowe raczej w parze nie idą). Dlatego wykorzystano tam sieć bayesowską, która na podstawie listu przewozowego i licznika określa, czy jest to bezpieczny transport czy nie. Prawdopodobieństwo nie przyjęcia transportu jest wyższe jeżeli wykryte zostanie promieniowanie a list przewozowy nie uwzględnia bananów ani porcelany i niższe jeżeli uwzględnia. Więc jeżeli zechcecie kiedyś wysadzić Amerykę bombą jądrową to pamiętajcie żeby otoczyć ją bananami na czas przewożenia.

: 22 lipca 2013, 12:01
autor: Bastian
Hej.

Dziękuję za odpowiedzi.

Nie wiem jakie wartości, które decydują o priorytecie realizacji będą miały zgłoszenia ale możesz zastosować średnią ważoną aby określić które zgłoszenie jest pilniejsze. Jedyne co przychodzi mi teraz do głowy.
Tak, to też co mi przyszło do głowy w pierwszej chwili. Idąc według wzoru:

x1w1+x2w2+x3w3
x = ----------------------------------
w1+w2+w3



co by było parametrem x1, x2, x3 w tym przypadku. Rodzaj parametru (tytuł, priorytet, czas na rozwiązanie itp.)? Bo jeżeli tak, to ustalając jakieś wartości x dla takich rodzajów, w ogóle nie potrzebuje wag, gdyż wystarczy średnia arytmetyczna.
Ambitnie, w czym chcesz to pisać? Bo najlepszym wyjściem byłby LISP lub Prolog wg mnie, najszybciej działa na podstawie bazy wiedzy, tylko tą też trzeba zbudować.
Czy ja wiem, czy ambitne? W zakresie w jakim to potrzebujemy, to chyba nie jest nic skomplikowanego dla kogoś, kto ma doświadczenie i wiedze w algorytmice i AI. Ja niestety nie mam. Mam natomiast narzędzie w ręce w postaci umiejętności programowania w jakimś tam zakresie.

Tak wiem, że istnieją LIPS i Prolog i mógłbym użyć tego jako nakładki, gdyż sam program pisany jest z wykorzystaniem node-webkit z wykorzystaniem javascriptu i HTML5 (gdyż programuje w technologiach webowych), więc postaram się to napisać w js.

Czocher, dziękuję za wskazanie dobrego kierunku. To brzmi wystarczająco profesjonalnie jak na moje potrzeby. Już zgłębiam temat, ale fajnie to opisałeś. Jakbym miał jeszcze pytanie to będę je zadawać tutaj. Dziękuję.