Tak z ciekawości chciałem zapytać czy ktoś z Was próbował na spoju używać sztucznej inteligencji w szukaniu rozwiązań - algorytmy genetyczne, ewolucyjne albo mrówkowe…?
Co o tym sądzicie?
created
last reply
- 12
replies
- 927
views
- 5
users
- 9
links
Tak z ciekawości chciałem zapytać czy ktoś z Was próbował na spoju używać sztucznej inteligencji w szukaniu rozwiązań - algorytmy genetyczne, ewolucyjne albo mrówkowe…?
Co o tym sądzicie?
Nie, ja tylko swojej własnej ogranicznej [ograniczono-organicznej].
Na spoju jak i na wojnie i w miłości wszystkie chwyty są dozwolone jezeli są wykonywalne.
Mozesz użyć dowolnego z dostępnych języka programowania. Możesz programować używając klas i szablonów jezeli są dostępne w danym języku programowania, ale możesz też “gadać” z maszyną bezpośrednio w jej własnym sztucznym języku maszynowym.
Jest całkowita dowolność, więc możesz spróbować zaprzęgnąć sztuczną inteligencję jeżeli wierzysz, że to przyniesie jakieś efekty. Ja nie próbowałem i pewnie długo jeszcze nie spróbuję, ale może ktoś …?
PS
Odnośnie tematu wątku - nie odnotowałem obecności takowej na Spoju
Ja bym powiedział, że większym problemem jest natura samego SPOJa. Dla każdego przypadku mamy określone wejście i określone wyjście (rozwiązanie). Jednocześnie, treść zadania określa rozwiązanie w sposób jednoznaczny (wiemy, co i w jakim formacie zwrócić) oraz na ogół dokładny (nie dopuszczamy rozwiązań błędnych, o ile błąd mieści się w przedziale jakimś).
Czyli trzeba poświęcić dużo czasu na stworzenie rozwiązania typu AI (SPOJ nie dopuści zewnętrznych bibliotek), poza tym trzeba je jakoś testować i oceniać poprawność wyników (czyli de facto i tak trzeba rozwiązać zadanie, a w praktyce nawet optymalnie bo algorytm typu TLE da o sobie znać przy testach AI), a w dodatku jeden błąd dla jednego przypadku wśród miliardów testów i mamy WA. Do tego samo AI musi działać dość szybko dla danych testowych by nie dostać TLE no i sam problem musi być rozwiązywalny np. za pomocą algorytmów ewolucyjnych.
Średnio widzę realizację czegoś takiego. Spotkałem się z ludźmi, którzy próbowali stosować np. rozwiązania przybliżone. Może nie nazwałbym tego od razu rozwiązaniami numerycznymi, ale np. w łatwych było jakieś zadanie z ścigającymi się gąsienicami (mam nadzieję, że pamięć mnie nie zawodzi…) i ktoś napisał mi na priva, że próbował zrobić je chyba w Pythonie symulując ruch gąsienic z jakimś krokiem czasowym. Efekt: WA (za duży krok nie pozwolił wykryć zderzenia) lub TLE (za mały krok i program się dławi wykonując nadmiar obliczeń).
Panowie myślę że mało wiecie o AI. Sztuczna inteligencja to dość szaroki zakres, natomiast ja wyżej wspomniałem o AE, AG, które mają mało wspólnego z uczeniem maszynowym. Nie potrzeba tutaj zaciągać żadnych bibliotek zewnętrznych, a także mogą dawać optymalne wyniki. Istotą AG rzeczywiście jest aby dawały dobre wyniki, niekoniecznie najlepsze, ale przy dobrze dobranych parametrach wejściowych i przy problemach spojowych nie powinno być żadnych problemów aby uzyskiwać optymalne wyniki w stosunkowo dobrym czasie.
Ale tutaj już może być problem, bo jeśli w zadaniach gdzie metody dokładne potrzebuję kilka tgodni na przeliczenia to algorytmy genetyczne znajdą rozwiązanie w sekundę. Ale dla spoja sekunda to też może być za dużo, wszystko zależy pewnie od konkretnych zadań.
Ja widzę duże możliwości AG np w problemach plecakowych, grafach itp…
Pogrubienie kluczowe
Pogrubienie kluczowe
Rozwal to to się przekonamy - tak będzie najprościej. Oczywiście, nie możesz skorzystać ze wzorcowego plecaka na ŻADNYM etapie tworzenia rozwiązania. Przykładowo, jeśli widzisz tu sieć neuronową, nie korzystasz z knapsnacka również do weryfikowania tego co zwraca owa sieć dla ustalonych wag np. podczas jej uczenia. Na tej samej zasadzie: nie korzystasz z knapsnacka rozpisując coś na kartce papieru, robisz ewolucję - funkcja celu nie dotyka knapsnacka itd. Wszak to, jak rozumiem, jest celem: pokazać, że da się wykorzystać AI na SPOJu zamiast szukania rozwiązań wzorcowych przewidzianych przez autora
3 gr. z mojej strony w sprawie “sztucznej inteligencji”
Takie wyobrażenia gościa, który styczność z SI miał tylko na studiach, teraz dopiero zaczynam się w to wgłębiać, cholernie to jest ciekawe, bo nie wiadomo, co to przyniesie w przyszłości.
Na przykład, na spoja wystarczy jeden program komputerowy realizujący SI, który to np. dostanie na swoją cyfrową twarz jakieś zadanie, i na podstawie tej tylko treści, będzie w stanie wygenerować kod źródłowy programu komputerowego (nie wyszukać w internecie rozwiązania, ale wytworzyć je na podstawie swojej wiedzy), który przejdzie AC, czyli SI, tak jak zwykli użytkownicy, nie bedzie znała wszystkich przypadkow testowych, ale program, który wygeneruje, bedzie musial byc na nie przygotowany.
Nie wiem, jak obecnie na świecie jest zaawansowany postęp w tej dziedzinie, czasami docierają różne wersje, przykład: Google SI zbudowany na sieciach neuronowych uważa, że inne SI zbudowane na zasadzie programu komputerowego (ify, itd, losowy wybor odpowiedzi), nie jest inteligetny jak MY (Google SI uważa się, że należy do tego samego zbioru co ludzie astrofaza-AI-świadomość1), z drugiej strony, takie neuronowe SI ma wielkie problemy, aby zrozumieć mowę, ale z obrazami radzi sobie już bardzo dobrze, dlatego mowa zamieniona na obraz daje dużo lepsze efekty.
Tu wkroczę, bo pośród mojej klienteli trafił się projekt dla jankeskiej firmy tworzącej różne technologie rozpoznawania i przetwarzania mowy. Coś a’la “czy dzisiaj będzie padać w Berlinie?” -> “Nie, nie przewiduje się dzisiaj opadów deszczu w Berlinie” -> “a jutro w Warszawie?” -> “Tak, w Warszawie zapowiadane są opady deszczu jutro o godzinie 12”. Są też inne bajery typu “puść mi n-tą piosenkę z playlisty”, ale nie wnikając.
Rozpoznawanie obrazów jest spoko - sam kiedyś w Pythonie bawiłem się w odtwarzanie obrazu algorytmem ewolucyjnym(1). Technologia ma potencjał i faktycznie da się z nią zrobić wiele. W dodatku względnie niewielkim wysiłkiem daje całkiem naturalne i zgodne z oczekiwaniami wyniki (np. rozpoznawanie pisma).
Tworzenie AI do rozpoznawania mowy to koszmar (2). Możliwości są słabe (te trzy słowa to tylko moja opinia; sam nie używałbym tego co dostarczyłem klientowi - dalej już bardziej obiektywnie), problem uchodzi za niemożliwy do rozwiązania (ludzie sami mają problemy ze zrozumieniem niektórych wypowiedzi, a co dopiero komputery) w ramach uczenia maszynowego (pełne rozwiązanie ma być możliwe w ramach tzw. silnej sztucznej inteligencji), po dziś dzień rozwiązania typu ELIZA1 są podstawą.
No i tak też było, jest i będzie w tym moim projekcie Wymagania wstępne: program układający paski z niszczarki tak by odtworzyć pierwotny tekst, który skądinąd kazał zapoznać się z pierwszą publikacją Shannona na temat entropii. Rzeczywistość: dowiedzenie się, że polskie liczebniki są jednymi z bardziej skomplikowanych na świecie i środowiska akademickie sobie z nimi nie radzą (3), pisanie programów dostających na wejściu “12” a zwracających “dwanaście”, łapanie nieco wygodniejszym odpowiednikiem wyrażeń regularnych opracowanym przez klienta wszystkich możliwych sposobów zapytania “jaka jest godzina?” (np. “która jest teraz?”, “jaki mamy czas?”, …).
(1) Szukałem jakiegoś fajnego przykładu na szybko w sieci, ale lipa. Najbliższe temu co robiłem znalazłem tu i polecam dla zabawy Przy czym w mojej wersji nie było rozwiązań takich jak pygad tylko NumPy i ręczne kodowanie wszystkiego dla nauki i zabawy z wykorzystaniem tutoriali.
(2) Daniel Jurafsky, James H. Martin: Speech and Language Processing. An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition. Z tej książki przygotowywałem się merytorycznie do projektu.
(3) Polecam1 na początek zainteresowanym tematem wraz z linkiem (gdzieś tam jest zaszyty) do artykułu na temat liczebników. Jeżeli autor witryny to widzi, raz jeszcze mu dziękuję, choć pod innym nickiem niż w mailu (on wie o co chodzi ), bo gdyby nie jego strona, zabijalibyśmy się o liczebniki porządkowe większe niż dwa tysiące oraz słowa typu “dziewięciomaset”. Przy okazji polecam zainteresowanym jego bibliotekę (udostępnia po otrzymaniu maila) - rewelacyjna.
P.S. i ad. 3) Odnosząc się do “obecnej sytuacji geopolitycznej” i dominujących w Polsce ocen na temat pewnego (formalnie) naszego sąsiada, doniosę tylko jako ciekawostkę, że w pewnym wschodnim kraju, który słynie z równie bogatego fleksyjnie jak nasz języka, choć bez wołacza (i wiem: боже), bardzo brakowało im tego typu rozwiązań, np. nie mają naszego narodowego Morfeusza3 więc musieli wszystko kodować samemu z marnym rezultatem
Lubisz się rozpisywać, nie ma co
Tu akurat pierwsze słyszę aby algorytm ewolucyjny stosować do rozpoznawania pisma… Do tego akurat świetnie nadaje się właśnie sieć neuronowa. Tutaj link2 do krótkiego programu rozpoznającego odręcznie pisane cyfry, jaki pisałem 2 lata temu w Pythonie, są tutaj również wyniki jego działania, można również samemu przetestować ale zdaje się już nie działą bo pozmieniały się wersję dołączonych bibliotek.
@manjaro
BTW: kod z linku działa, ale trochę trzeba było się namęczyć. Ja mam Anaconda i Spyder. Nie było modułu tensorflow, więc zainstalowałem ale niechcący jako pip install tensorflow co oznacza, że będzie wykorzystywany procesor graficzny (GPU). Potem w Windows trzeba mieć zainstalowane WSL2 itd. W końcu kod w ogóle przestał działać bo: from google.protobuf import descriptor as _descriptor ImportError: cannot import name ‘descriptor’. Jakoś po drodze mi się protobuf zaktualizował, a powinien być taki jak instaluje tensorflow. Czyli odinstalowałem protobuf, odinstalowałem tensorflow, zaintalowałem tensorflow-cpu (bez wsparcia GPU) i działa.
Aktualizacja: jeśli ktoś ma Anaconda+ np. Spyder to instaluje się tak:
https://docs.anaconda.com/anaconda/user-guide/tasks/tensorflow/3
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
I want Preparation Tips for an Upcoming SPOJ Contest | Tutoriale, poradniki | 2 | 168 | Jun '24 |