Chcecie dobry konkurs?

0

Chciałbym zrobić konkurs programistyczny, ale nie taki gdzie liczy się powiedzmy szybkość wykonania, ocena sędziów. Zawodnicy musieli by napisać program AI(sztucznej inteligencji), a dokładniej funkcję która była by odpowiedzialna za sterowanie wirtualnym bohaterem. Bohaterem... dużo powiedziane, jakimś "czymś" np. wężem(tym z starych komórek). Toczone były by wirtualne pojedynki pomiędzy zawodnikami(ich funkcjami). Pierwsze miejsce to oczywiście nagrody.

Ale mam kilka pytań odłączenie tego pomysłu do was:
-Czy chcielibyście <ort>wziąźć </ort>w tym udział.
-Jaki język, jak duża ilość możliwych operacji w wirtualnym świecie(Tak aby słabsi programiści dali sobie radę z napisaniem "średniego" algorytmu).
-Jaki rodzaj pojedynków. Moim pierwszym pomysłem były pojedynki ort!, trzeba <ort>odgryź </ort>część przeciwnika, można stosować uniki... Myślę że macie tutaj ciekawsze pomysły
-jakieś sugestie?

0

pomysl nie jest zly tylko okresl srodowisko takiej "walki"

0

Jeśli chodzi o język programowania to myślę o c++ lub Pascalu.
Zawodnik dostawał by kod źródłowy na którym mógłby wypróbować swoje dzieło.
Aby sterować wirtualnym bohaterem, dostępna by była klasa np. CWąż zawierająca takie metody jak np. W_Lewo,W_Prawo,Co_widzisz,Podaj_położenie...
Symulacje pojedynków odbywały by się na serwerze, potem ich wyniki a może i przebieg można by zobaczyć na stronie projektu.

Przepraszam za zbytnie używanie trybu przypuszczającego.

0

Hmm, pomysł ciekawy. Na pewno chętnie wziąłbym w takim konkursie udział. Co do środowiska walki: jak dla mnie całkiem niezły pomysł z tym wężem, plansza jak dla mnie mogła by to być jak w klasycznych 'wężach' dwuwymiarowa i podzielona na pola (można by też spróbować z 'gładką' planszą na której można by obracać głowę węża o dowolny kąt, tyle że było by to trudniejsze i dla twórców konkursu, i dla uczestników ;)) może oprócz węży byłyby na niej jakieś przeszkody (np. ściany) i bonusy (np. tak jak w pacmanie można by 'gryźć' tylko po zdobyciu odpowiedniego bonusa).

Język to dla mnie najlepiej C++ albo Pascal, chociaż jeśli obsługa węża odbywała się tak jak to wymyślił Sunday to może wystarczyłoby podanie samego algorytmu bez implementacji w jakimś konkretnym języku. ;)

0

bez implementacji raczej nie da rady, bo kod musi być wykonany przez komputer.

0

COREWARS, COREWARS [diabel]
dobra, proponuję coś nieco ambitniejszego niż jakieś tam algorytmy :> A mianowicie:

  • maszyna wirtualna /najlepiej postawiona na serwerze 4p/ z własnym formatem instrukcji;
  • asembler na tą maszynkę :> oczywiście nie jakieś x86 czy '51 ale nieco prostszy, oferujący kilka nieco bardziej kompleksowych rozkazów;
  • VMasm kompilowany do bytekodu /oczywiście też własnego/ lokalnie lub na serwerze, będzie potrzebny debugger i emulator ale to nie problem.
  • projekt OpenSource, jeżeli serwer docelowy chodzi na IA-32 to mogę się podjąć /chyba... ;P/ implementacji silnika w czystym asm + C na front-end /tu już nie dla mnie jeżeli trzeba sieć obsługiwać/;
    Ciekawie by się coś takiego zapowiadało, samą VM zrealizować to też nie jest jakiś wielki problem /przynajmniej dla mnie/.
    Oczywiście nie chodzi mi o idealnego klona CW - tylko pomysł jako taki. Kto jest za? Trzeba będzie omówić jakie konkretnie zasady mają panować, jakie ograniczenia. Co do VM - demokratycznie dojdzie się jak to ma wyglądać :>. Po sformułowaniu założeń można się brać za robotę. Tylko nie mówcie, że to zbyt ambitne... chyba, że chcecie mieć wizualizację 3D pamięci i procesów VM i masową wojnę XXX programów [rotfl]
0

Serwer jest :)
czy to pod wodza Linuksa, czy tez *BSD (do wyboru, do koloru)

0

Własny język, coś podobnego do asm, bardzo ambitne. Ale trzeba by było to dokładnie przeanalizować. Jeśli swoje kody użytkownicy będą tworzyć w c++ lub Pascalu odpada masa problemów. Przede wszystkim nie trzeba się uczyć języka który ma zastosowanie tylko w jednym projekcie, wielu ludzi już umie c++ bądź Pascala. Pyzatym jeśli chodzi o zastosowanie już istniejącego języka uczestnicy mogli by to traktować jako dobre ćwiczenie. Ale nad wszystkim można się zastanowić.

Druga sprawa to jak ma się odbywać ta walka. Chciałbym żeby to nie były tylko walki kodów – zajmowanie pamięci innym procesom, jakieś walki wirusów, w gruncie to praktycznie matematyka. Myślę że lepiej było by żeby gościu mógł zobaczyć jak wynik jego prac się sprawuje, potrzebna jest wizualizacja walk.

Co do współpracy, mam nadzieję że na tym forum pojawi się jeszcze kilka ciekawych pomysłów, zaangażuje się kilku ludzi, uda nam się spotkać np. na gg, nakreślić plany…

Czy mogło by to wyglądać mniej więcej w taki sposób:

const Szerokosc_widzenia=5; //określa wielkość kwadratu który 'widzi' wąż
const Ilosc_czesci_max=25; //określa ile z ilu elementów maxymalnie może się składac wąż

enum TWynik_decyzji{dalej=0,lewo=1,prawo=2}; //typ- jakie decyzje może podjąć wąż(funkcja decyzyjna)

TWynik_decyzji Decyzja(char** widoczne,char* stan_czesci) //funkcja decyzyjna opisana niżej
{
//Tutaj zawodnik umieszcza kod sterujący wężem
}

//Zawodnik pisze cialo tej funkcji, ma ona na celu pokierować wężem (Zwrucic odpowiednią wartosc)
//jako parametry otrzymuje w tablicy widoczne wykaz tego co widzi wąż,
//tablica ma dwa wymiary widoczne[Szerokosc_widzenia][Szerokosc_widzenia] wypelnione
// np. 'X'-częsc przeciwnika, 'P'-punkt...
//Drugi parametr to stan części to tablica jedno wymiarowa stan_czensci[ilosc_czesci_max]; i podobnie
//np.'o'-moja częśc,'z'-aktualnie zjadana...
//funkcja Decyzja jest wywoływana naprzemiennie z funkcją decyzja przeciwnika

0

ITPW - możecie zobaczyć jak tam to robili - programy pomocnicze też są udostępniane... Dobry pomysł na grę(walkę) to podstawa, rok temu była niezła zabawa, a w tym roku nie chciało mi się nawet jakiegoś naiwnego programu napisać.

Pozdrawiam!

0

No właśnie - http://www.mimuw.edu.pl/KNI/ITPW/ to pomysł z pierwszego postu... nie brałem nigdy udziału, ale wygląda fajnie.

Jednakoż bardziej podoba mi się pomysł Deusa :P Tylko żeby to było naprawdę hardcorowo - najlepiej Asm, C... ew. C++ ale to już chyba 'za wysoko'.

0

Witam pomysł świetny!
Pewnie nie doczytalem i ten pomysł juz padł ale i tak napisze iz mozna by zrobić coś `ala <ort>protokuł </ort>programiście dostarczas sie komendy a reszta zalezy od niego i mozna pisac we wszystkim.
Potem pozostaje tylko sprawa jakiejs klasyfikacji lub ogramiczeń (wielkość kodu) i do roboty pozdr

0

Maszyna wirtualna z własnym zestawem instrukcji + asembler do niej.
Jeśli dobrze to będzie zrobione (a jeśli będzie to robić śmietanka 4p, to nie ma mowy żeby było źle) to proste języki wyższego poziomu też się da na tym zrobić. Ba, jeśli będzie to dobrze zrobione to samą maszynę można rozwijać do nawet zgodności z x86... Ale to już większy hardkor.

Teraz pytanie takie: czy to ma być coś a'la core wars gdzie programy biją się ze sobą? Bo jeśli tak to może to być trochę nudne, IMO lepiej by było, gdyby było coś oprócz bijących się programów, walki w kilku kategoriach itd. Dla przykładu

  1. Sama maszyna, programy walczą ze sobą o kontrole największego obszaru pamięci / przejęcie kontroli nad maszyną
  2. Sama maszyna, program GUARDIAN vs. program ATACKER, każdy robi jednego atakera i jednego guradiana i jest robione w formie dwóch pojedynków
  3. Maszyna + pseudo system vs atacker. pseudo system robi GrupaBoguff (tm)
  4. Maszyna + pseudo system, 2 programy walczą o zdobycie kontroli nad systemem. nie dość że progi walczą między sobą, to system się broni.
  5. Maszyna + pseudo system + Guardian vs Atacker. system uznaje Guardiana za swoją część i daje mu dość dużą (ale nie pełną) kontrole, zadanie: odeprzeć atackera, ba jeśli guardian przegra, to system nadal sam się broni. system podobny jak GvA.

no i jeszcze można trochę wymyślić.

Walki by były punktowane na różnych zasadach: czas działania, skuteczność itd. Można by nawet robić rankingi turniejowe.

Co do wizualizacji, widze to na kilka różnych sposobów.
(1) Dla 1: maszyna przedstawiona jest jako 3 bloki podzielone na mniejsze, największy to "dysk" podzielony na 128 obszarów, potem "pamięć" na 64, potem "procesor" na 8. Zadanie przejęcia kontroli polega na: zawodnicy startują z "pamięci" ale nie mogą ruszyć pamięci dopóki nie mają opanowane przynajmniej 25% dysku, potem mogą atakować pamięć, jednocześnie pamiętając o dysku. Procesor można zaatakować mając przynajmniej 40% dysku i 45% pamięci. Wygrywa przed czasem ten, kto opanuje procesor, jeśli nie da się przed czasem to ten kto kontroluje więcej zasobów.
Wizualizacja wygląda tak:
-Dla "widzów": cały obszar maszyny jest widoczny i tak podzielony jak w założeniach, blok pod kontrolą ma logo programu. Blok nie będący pod kontrolą nic nie ma (albo ma turecki sweter). Blok atakowany miga logo danego programu. Bloki już należący do jednego programu jeśli jest atakowany przez inny, miga naprzemiennie logami tych programów.
-Dla "walczących": bloki są ukryte, widzi tylko to co jego program zdobył, lub o co walczył.

(2) dla 2: podobnie jak w (1) z tym założeniem że guardian ma 15% dysku i 5% pamięci. walczący atakerem widzi tak jak walczący w (1), walczący guardianem widzi pół dysku i pół pamięci + to o co walczył

(3) podobnie jak w (2) z tym że nie ma walczącego guardianem, system ma 80% dysku i 70% pamięci. w przeciwieństwie do guardiana nie atakuje poza swój początkowy obszar swojej działalności, lecz ma pełną widoczność. gdy walka zejdzie na procesor, system ma pół bloków. ograniczenie systemu względem guardiana jest takie, że system może na raz pilnować tylko tyle bloków ile wpływów posiada w procesorze, tzn jeśli system ma 4 bloki na procesorze (odpowiednie dla początku gry) to jednocześnie może walczyć tylko o 4 bloki na pamięci i dysku.

(4) połączenie (1) i (3) + system może wyjść o 10% poza swoje + może walczyć o 2x tyle bloków ile ma na procesorze.

(5) połączenie (4) i (2), system ma 55% dysku i 45% pamieci, guradian jest gościem na 60% zasobach systemu + swoje założenia początkowe. system broni swoich bloków przed atakerem jak w (3) + jeśli guradian odzyska dla systemu blok to musi go zwrócić do systemu w ciągu założonej jednostki czasu, np czas potrzebny na przejęcie niebronionego bloku * 4. w przeciwnym wypadku system walczy z guarianem tylko o ten blok. jeśli guardian "ma" ponad 80% zasobu systemu niezwróconego, system walczy również z guardianem. Blok systemu na którym gości guardian to pół logo systemu/pół loga guardiana

Ech, to bardziej przypomina zasady niż wizualizacje...

Dla wizualizacji przy takich założeniach można chyba dość łatwo zrobić to na stronie z użyciem AJAX. Jak się postarać, to można też zrobić klienta serwera takich walk, żeby wizualizował przy użyciu sdl, opengl, directx i co tam jeszcze się da.

//EDIT: Jedzące się węże to w porównaniu do core-wars lypa! Deus dobrze prawi z core wars.

0

Ba, jeśli będzie to dobrze zrobione to samą maszynę można rozwijać do nawet zgodności z x86... Ale to już większy hardkor.
Aż x86, chroniony czy rzeczywisty... a może dać możliwość przełączania? Z rozwinięciem problemu by nie było - piszę debuggger z disassemblerem przystosowanym do analizy i emulacji kodu więc /uwaga - uświęcone wieloletnią tradycją stwierdzenie/ jak skończę mogę to dostosować na potrzeby 4P-Wars :-) . Problemem jest coś innego - asm IA-32 jest bardzo skomplikowany dla zwykłego programisty. Kto na 4p - pomijając mnie - byłby w stanie pisać te nasze wirusy korzystając w pełni z możliwości tego asma?

maszyna przedstawiona jest jako 3 bloki podzielone na mniejsze, największy to "dysk" podzielony na 128 obszarów, potem "pamięć" na 64, potem "procesor" na 8.
Hm, trochę mało tego - oczywiście jeżeli jeden obszar == jedna komórka pamięci /jeden bajt/. Jak dla mnie 2^12 pamięci to minimum - kod programu też trochę zajmuje, w sumie można by go ograniczyć do stałego rozmiaru opkodów /DWORD/. Druga sprawa to wygląd pamięci w momencie zainicjowania VM - jakieś śmieci, db 0 czy co? Proponuję wypełnienie 0xFF /czyli po ludzku -1/, dałoby to programom możliwość 'znalezienia' innych kodów, przejęcia kontroli nad przeciwnikiem i 'wtopienia' się w niego, asymilacji /oczywiście można ładnie oszukać oszukać przeciwnika dająć odpowiednią sekwencję bajtów... film 'Coś' mi się przypomina ;P/. Może podział pamięci na strony /ew. segmenty/ czy coś w tym stylu?

Teraz pytanie takie: czy to ma być coś a'la core wars gdzie programy biją się ze sobą? Bo jeśli tak to może to być trochę nudne, IMO lepiej by było, gdyby było coś oprócz bijących się programów, walki w kilku kategoriach

Co ja dalej chciałem... a, już mam: na jakiej zasadzie te programy mają konkretnie walczyć - wypełnianie pamięci bajtami o własnej sygnaturze jest raczej znacznie nudniejsze niż stary CW. To jest sedno sprawy - jak to ma wyglądać od strony wirtualnego sprzętu? Zmuszenie przeciwnika do rzucenia wyjątkiem, ew. obrona\naprawa swojego kodu przed takimi atakami przeciwnika nie jest zła. Ale można wymyślić jeszcze inne zadania - utworzenie XX niezależnych wątków czy przejęcie XX% czasu procesora. Np. nowy wątek zwiększa - kosztem czasu przeciwnika - czas procesora dla danego procesu o 1/2 aktualnego czasu czasu wątku, jak chyba widać zwiększa się liczba cykli dla procesu, ale zmniejsza dla pojedynczego wątku zmniejszając jego możliwości bojowe i czyniąc program łatwym celem - czas wątku == czas_procesu / liczba_wątków. Jeżeli ma być pseudo-OS to trzeba wprowadzić poziomy uprzywilejowania.
Dobra, a teraz to co najbardziej interesuje moją skromną osobę: jak konkretnie ma VM wyglądać?

  • rejestrowa - x86 się kłania
  • stosowa - MIL czy jak się asembler .NETa nazywał
  • 'pamięciowa' - RedCode /asm CW/
    Mnie każda pasuje, chociaż 1, 3 przede wszystkim /stosową ścierpię/. W sumie rejestrowa ze stosem /jak w IA-32/ ma największe możliwości. Stos jako zwykły fragment pamięci, który przeciwnik może nadpisać czy prywatne sprzętowe 'coś' o ograniczonym rozmiarze? OK, jak już ustalimy jaka to VM, będzie trzeba rozkazy wybrać i format instrukcji opracować /to w sumie będzie najprostsze/. Myślę, że ograniczymy się do wyłącznie liczb całkowitych + ew. oparte na nich struktury kontrolne VM. Na co komu float do ukatrupienia przeciwnika? Cechą go czy mantysą przez stos? ;-P Jeszcze jedna sprawa: instrukcja == 1 cykl procesora? A może bardziej kompleksowe instrukcje będą dłuższe? Wypadałoby dać jakąś konkretną liczbę cykli procesowi np. czas procesora dla jednej tury /tury wszystkich programów/ wynosi 256 czyli po 128 na proces /oczywiście na starcie/.
    Wizualizacja to już nie moja sprawa - mnie tekstowe logi wystarczą... byle by to nie myło różowe!

Dobra, Wy myślcie, a ja idę się pobawić w "co autor chciał przez to powiedzieć?" silnikiem disasemblera - natrzaskałem kawał czasu temu struktur i flag, zająłem się czym innym i efekty są jakie są :/

0
deus napisał(a)

Ba, jeśli będzie to dobrze zrobione to samą maszynę można rozwijać do nawet zgodności z x86... Ale to już większy hardkor.
Aż x86, chroniony czy rzeczywisty... a może dać możliwość przełączania? Z rozwinięciem problemu by nie było - piszę debuggger z disassemblerem przystosowanym do analizy i emulacji kodu więc /uwaga - uświęcone wieloletnią tradycją stwierdzenie/ jak skończę mogę to dostosować na potrzeby 4P-Wars :-) . Problemem jest coś innego - asm IA-32 jest bardzo skomplikowany dla zwykłego programisty. Kto na 4p - pomijając mnie - byłby w stanie pisać te nasze wirusy korzystając w pełni z możliwości tego asma?

Nie musisz tego tak mocno wbijać... tylko zasugerowałem, ale zaznaczyłem że to większy hardkor...

deus napisał(a)

maszyna przedstawiona jest jako 3 bloki podzielone na mniejsze, największy to "dysk" podzielony na 128 obszarów, potem "pamięć" na 64, potem "procesor" na 8.
Hm, trochę mało tego - oczywiście jeżeli jeden obszar == jedna komórka pamięci /jeden bajt/. Jak dla mnie 2^12 pamięci to minimum - kod programu też trochę zajmuje, w sumie można by go ograniczyć do stałego rozmiaru opkodów /DWORD/.

e... niezbyt, myślałem bardziej że jeden blok = 10 KB, wtedy prawdziwe by się stało stwierdzenie "640 KB wystarczy każdemu".

deus napisał(a)

Druga sprawa to wygląd pamięci w momencie zainicjowania VM - jakieś śmieci, db 0 czy co? Proponuję wypełnienie 0xFF /czyli po ludzku -1/, dałoby to programom możliwość 'znalezienia' innych kodów, przejęcia kontroli nad przeciwnikiem i 'wtopienia' się w niego, asymilacji /oczywiście można ładnie oszukać oszukać przeciwnika dająć odpowiednią sekwencję bajtów... film 'Coś' mi się przypomina ;P/. Może podział pamięci na strony /ew. segmenty/ czy coś w tym stylu?

podobnie to widziałem. "Czysty" bajt pamięci to 0xFF i wtedy rzeczywiście daje dobre rezultaty. Podział pamięci tak jak wspomniałem na bloki po 10KB, oczywiście to jest podział taki draftowy, ostateczna wersja ile czego i po ile to inna bajka.

deus napisał(a)

Teraz pytanie takie: czy to ma być coś a'la core wars gdzie programy biją się ze sobą? Bo jeśli tak to może to być trochę nudne, IMO lepiej by było, gdyby było coś oprócz bijących się programów, walki w kilku kategoriach

Co ja dalej chciałem... a, już mam: na jakiej zasadzie te programy mają konkretnie walczyć - wypełnianie pamięci bajtami o własnej sygnaturze jest raczej znacznie nudniejsze niż stary CW. To jest sedno sprawy - jak to ma wyglądać od strony wirtualnego sprzętu? Zmuszenie przeciwnika do rzucenia wyjątkiem, ew. obrona\naprawa swojego kodu przed takimi atakami przeciwnika nie jest zła. Ale można wymyślić jeszcze inne zadania - utworzenie XX niezależnych wątków czy przejęcie XX% czasu procesora. Np. nowy wątek zwiększa - kosztem czasu przeciwnika - czas procesora dla danego procesu o 1/2 aktualnego czasu czasu wątku, jak chyba widać zwiększa się liczba cykli dla procesu, ale zmniejsza dla pojedynczego wątku zmniejszając jego możliwości bojowe i czyniąc program łatwym celem - czas wątku == czas_procesu / liczba_wątków. Jeżeli ma być pseudo-OS to trzeba wprowadzić poziomy uprzywilejowania.

Hmm... zapełnienie pamięci własną sygnaturą, to jedna z wielu możliwości, można przecież jeszcze mnożyć własny kod i go uruchamiać jako odrębnego wojownika w trybie co-op, można robić "lock" pamięci, można nadpisać kod przeciwnika i zmuszać do różnych działań na własną rzecz... masa kombinacji różnymi stronami. So many ideas so little space... oczywiście oprócz wygrania przez przejęcie zasobów (std) to przecież można by wygrać np. absolutnie blokując przeciwnika (np. ustawić bit NX dla obszaru pamięci w którym się znajduje... chamstwo), "wywalić go" (buffer overflows, access violations, runtime-errors, you name it) i najbardziej spektakularne: przejąć go, czyli tak go skonfundować żeby albo powielał segment przeciwnika, albo coś takiego czy innego.

deus napisał(a)

Dobra, a teraz to co najbardziej interesuje moją skromną osobę: jak konkretnie ma VM wyglądać?

  • rejestrowa - x86 się kłania
  • stosowa - MIL czy jak się asembler .NETa nazywał
  • 'pamięciowa' - RedCode /asm CW/
    Mnie każda pasuje, chociaż 1, 3 przede wszystkim /stosową ścierpię/. W sumie rejestrowa ze stosem /jak w IA-32/ ma największe możliwości. Stos jako zwykły fragment pamięci, który przeciwnik może nadpisać czy prywatne sprzętowe 'coś' o ograniczonym rozmiarze? OK, jak już ustalimy jaka to VM, będzie trzeba rozkazy wybrać i format instrukcji opracować /to w sumie będzie najprostsze/. Myślę, że ograniczymy się do wyłącznie liczb całkowitych + ew. oparte na nich struktury kontrolne VM. Na co komu float do ukatrupienia przeciwnika? Cechą go czy mantysą przez stos? ;-P Jeszcze jedna sprawa: instrukcja == 1 cykl procesora? A może bardziej kompleksowe instrukcje będą dłuższe? Wypadałoby dać jakąś konkretną liczbę cykli procesowi np. czas procesora dla jednej tury /tury wszystkich programów/ wynosi 256 czyli po 128 na proces /oczywiście na starcie/.

"Nie mam pojęcia o czym pan mówi", ale co do instrukcji to miałem taki sen żeby instrukcje wykonywały się w miarę realnie, co znaczy że niektóre mogły by zająć 1/2 cyklu, niektóre 12 itp. Tury dobrze by było móc ustawiać zależnie od poziomu walk itd... jeszcze fajnie by było gdyby oprócz tur było też "real-time"

deus napisał(a)

Wizualizacja to już nie moja sprawa - mnie tekstowe logi wystarczą... byle by to nie myło różowe!

Wizualizacją mogą się zająć dzieci takie jak ja... I nie bój żaby, nic różowego czy innego cukierkowego nie będzie (chyba że pozostanie pomysł z logo programów, w tedy zależy tylko od twórców)

deus napisał(a)

Dobra, Wy myślcie, a ja idę się pobawić w "co autor chciał przez to powiedzieć?" silnikiem disasemblera - natrzaskałem kawał czasu temu struktur i flag, zająłem się czym innym i efekty są jakie są :/

Miłego.

Pamiętać należy że fajnie by było gdyby oprócz asemblera można było używać też innych języków, jak i na podstawie ich pisać nowe... dało by to duuuży realizm i niejedną pracę inżynierską/magisterską a nawet doktorską!

//edit: żebym nie zapomniał: przecież może być multum strategi, i multum rozwiązań a do tego można je kombinować razem w jednego wojownika... albo z jednego wojownika robi się kilka wyspecjalizowanych co-ops gdzie każdy robi swoje, byle by zdobyć przewagę... itd... wiele można kombinować i oby się dało...

//edit 2:

Bah, olśniło mnie!

Złą wodę wypiłem to mnie olśniło...

Gdzie w takim Core-wars sztuczna inteligencja programu, do tego jeszcze tak ograniczone środowisko?

No i jak mnie tak trafiło to pytanie, tak mnie trafiła odpowiedź:

Te opisane 4p-wars z tym ograniczonym środowiskiem, to pole testowe strategii, dające bojownikom możliwość przeanalizowania różnych strategii, sposobów obrony i ataku itp.
Teraz gdzie by się zaczęła sztuczna inteligencja: Uczestnicy pola testowego, powiedzmy top-20, albo i jeszcze inni ludzie, robią raz na jakiś czas (ustalany walnie) programy do robienia bojowników dla danej kategorii, czy cuś. Programy te właśnie by się popisywały sztuczną inteligencją, bo analizowały by strategie przeciwnika, znajdowały najlepszą obronę, implementowały w wojowniku, przewidywały strategie na następną turę itd. zagadka polegała by na tym, że programy analizują taktykę podczas walki, natomiast podczas walki nie mogą zmieniać kodu wojownika, dopiero po zakończonej rundzie (w razie wersji turowej tak samo, dopiero po zakończeniu walk) modyfikują wojownika dodając możliwe funkcje obronne + nowe strategie ataku. Oczywiście jakieś zasady tych modyfikacji by obowiązywały żeby nie było tak, że jeden program dodaje obronę na to co przeciwnik właśnie usunął.
Jak widać inteligencja tu jest, bo program musi być "wytrenowany" w rozpoznawaniu strategii, a sam na podstawie swojego treningu trenuje "pieska", czyli wojownika.
Przy takiej pobieżnej analizie, sądzę że zwycięzca w "inteligentnych wojnach" a raczej program tak stworzony byłby bardzo mocnym zawodnikiem...

//edit 3:

Jak to przeanalizowałem to widze kilka spraw nie związanych z samą stroną programową co z uczestnikami i develami:
-taki projekt jest cholernie skomplikowany, deus zapewne dużo potrafi, ale to nawet jego może przygnieść
-do wojen nie-inteligentnych output chyba powinien być w formie logów tekstowych, a z nich robić wizualizacje graficzne, da to większą możliwość dla tworzenia wojowników inteligentów i ułatwi tworzenie wizualizerów

-wojownika nie-inteligentnego bez problemu napisze jedna osoba, kwestia języka danego do dyspozycji przez twórcę maszyny... a może lepiej jak maszyna tylko by interpretowała bytecody czy cuś a języki by się napisało... nie wiem, ale na pewno wojownicy nie są aż tak skomplikowani
-wojownika inteligentnego napisać... no to już widzę większe problemy, kwestia zebrania danych treningowych, trenerów, sieci neuronowych... tu widze już teamy programistów...

0

Kolejne Core Wars. Moim zdaniem nie ma sensu powielać tego.
Lepiej byłoby się skupić, na czymś bardziej praktycznym. Ot np. wziąć Freeciv i np. napisać odpowiednie AI i kazać im ze sobą walczyć. To tylko przykład, ale mogłoby pomóc rozwiązać istniejące problemy.

0

to chyba niewiele ze sztuczną inteligencją ma wspólnego, musiałyby wystąpić olbrzymie ilości walk żeby program sam mógł się czegoś uczyć... w takich konkursach zazwyczaj autor programu określa mu strategię lub nawet wali randoma na wybór strategii (widziałem jak nawet najlepsi tak robili). Poza tym jak chcecie robić taki zaawansowany konkurs to nie wiem jak macie zamiar ściągnąć ludzi do niego? wg. mnie to nie powinien być konkurs elitarny... powinien być taki żeby każdy cymbał umiał coś napisać co będzie walczyć oraz ktoś dobry mógł się popisać. Nie stać was na nagrody żeby ściągać elite, która będzie pisać kody które robią kosmiczne rzeczy - programy które uczą się w trakcie walki, modyfikują swoje i cudze kody, które przewidują ruchy graczy... zwłaszcza że tych ruchów tak naprawde nie wiadomo ile jest.

zróbcie lepiej coś dla ludzi, a nie dla geniuszy, którzy mają za dużo czasu i chcą dzielić się całą swoją wiedzą ze wszystkimi wokoło

//śmiesznie poruszać teraz temat wizualizacji, jak już konkurs będzie to ktoś napisze program co z logów walki zrobi jakąś animacje...

0
nicka napisał(a)

to chyba niewiele ze sztuczną inteligencją ma wspólnego, musiałyby wystąpić olbrzymie ilości walk żeby program sam mógł się czegoś uczyć...

AI w sensie w jakim się go rozpatruje w odniesieniu do gier. Czyli tak, strategia. No chyba, że ktoś by wymyślił uczące się. To byłoby na prawdę ciekawe.

Poza tym jak chcecie robić taki zaawansowany konkurs to nie wiem jak macie zamiar ściągnąć ludzi do niego? wg. mnie to nie powinien być konkurs elitarny...

Może przeoczyłem coś czytając, ale tam chyba nikt nie pisał o jakiejś elicie :/ Wtedy to na pewno nie wypali.

0
Dryobates napisał(a)

Może przeoczyłem coś czytając, ale tam chyba nikt nie pisał o jakiejś elicie :/ Wtedy to na pewno nie wypali.

Niby nie, ale zaczynacie pisac o rzeczywiscie kosmicznych rzeczach, o maszynach wirtualnych, o szczegolowych rozwiazaniach w asmie i to rzeczywiscie zaczyna wygladac tak, ze malo kto tak naprawde bedzie mial umiejetnosci, zeby w tym wziac udzial. Ja osobiscie zgadzam sie z nicka. Nie ma sensu na poczatek walic takimi wielkimi zamyslami itp. Moze lepiej na poczatek napisac cos malego, w wysokim jezyku programowania (c++, java, c#, itp), gdzie praktycznie kazdy bedzie mogl cos zrobic niz schodzic tak nisko, ze chyba tylko Johnny_Bit i deus wiedza o czym pisza.

0

Wszystko fajnie ale może w końcu jakieś konkrety? Może ktoś wrzuci kawałek ciekawego kodu... Albo przynajmniej zaproponuje jak się zorganizować by projekt nie poszedł w zapomnienie?

0

Wszystko fajnie ale może w końcu jakieś konkrety? Może ktoś wrzuci kawałek ciekawego kodu...

Jakieś konkrety? Fajnie, ale dlaczego nie od Ciebie? Kawałek kodu? Nie ma sprawy - czekam tylko aż ktoś łaskawie sprecyzuje co robimy... i czy cokolwiek robimy :/ Bez przesady - oryginalny CoreWars ze swoim RedCode był bardziej spartański, znacznie trudniejszy od 'zwykłego' programowania w asemblerze. Ja tam chciałem wprowadzić bardziej cywilizowanego asma, ale jako, że odezwu praktycznie brak... Mogę wszystko zaprojektować, wykonać i jeszcze w tym tygodniu przedstawić kod silnika VM + powiedzmy makra fasm-a generujące kod dla maszyny /napisanie własnego asemblera trochę więcej zajmie/ - tylko czy ktokolwiek da mi gwarancję, że nie zostanę z tym sam /Johnny_Bit, cicho ;P/? Jeżeli wszystko przygotuję sam to skończy się tak: "#%$#$ deus to zrobił źle" czy "to jest %&$$"... Już kiedyś 'prowadziłem' projekt zbiorowy, jeżeli ludzie nie wspierają go od początku to potem nie ma kto pracować a efektów chcą wszyscy /przede wszystkim ci, którzy palcem nie kiwną/. Btw. grał ktoś w np. Homeworld? Czy specjalizacja jednostek nie utrudnia gry? Powiedziałbym, że system jednostek i ogólnie prowadzenia walki z H. jest równe skomplikowany co programowanie w asm... i jakoś sobie setki tysięcy graczy radzą - bo nikt nie mówi, że to asembler, język wyłącznie dla bogów... O syndromie małego chińczyka słyszeli? Może powiecie, że C jest prostym językiem? Tak? Przecież to tylko 'nakładka' na asma, jego przenośna, nieco bardziej czytelna forma. Nie bronię swoich racji, chcę Wam tylko uświadomić, że język to tylko narzędzie, a stopień komplikacji jest subiektywny...
Może jednak z konkursem damy sobie spokój, może nie wiem, jakiś projekt hm... naukowy czy coś jak to Dryobates określił 'dla ludzkości'? Wiele rzeczy czeka na wyjaśnienie, wiele rzeczy, w których wyjaśnieniu\zrozumieniu pomóc mogą zwykli programiści... Problem w tym, że jak znam życie to nawet do ciekawych doświadczeń z modelowaniem\analizą chętnych może brakować... Wspólne rozwiązywanie problemów, odkrywanie powiązań może być świetną rozrywką, formą rywalizacji i zdobywania wiedzy...

Widziałem zbyt wiele projektów, którym 'ukręcono łeb' gdy trzeba było się wziąć za realizację. Jak w krótkim czasie nie zobaczę konkretów to z całym szacunkiem, ale ja wysiadam...

0

Ja tam wskakuje i pomagam swoim małym rozumkiem... no i czasem i testami, a jeśli mam/będę miał to nawet umiejętnościami... Może i jestem głupi ale szybko się uczę. Jeśli będą jakieś konkrety, to mogę pomagać, ba nawet coś zrobić.

Tak w ogóle, to czemu ludzie boją się projektu podobnego do core-wars? racja, redcode jest pochlastany, ale mówię że jeśli wszystko dobrze zaprojektować, a właśnie na to jest czas to, to przecież można zbudować maszynę która na prawdę uczy.

Jeśli chce ktoś coś dla nauki: na podstawie takiej maszyny można zrobić (nawet na niej samej) algorytmy genetyczne, ich testowanie, testowanie ewolucji na danych założeniach, jakie organizmy wygrywają... to jest fajne i jak widać projekt taki może być wykorzystany w prawdziwym życiu naukowym...

Właściwie, to maszyna symulacyjna była by dobra i użyteczna do naprawdę dużej kombinacji problemów... od algorytmów podstawowych, przez różne (tj. genetyczne i inne) do czegokolwiek wyobraźnia poniesie. A i jakby ktoś nie zauważył to na maszynie symulacyjnej proponowanej przeze mnie bez większego trudu dało by się zrealizować to, co zaproponowane było w pierwszym poście, czyli granie przez komputer w węża sterowanego przez programy. Kwestia lekkiego zmodyfikowania założeń maszyny i warunków programów i viola.

//ps. Czyżbym nazbyt skomplikowanie mówił? Ja bardzo przepraszam w takim razie, ja mogę wyjaśnić jak komuś trzeba... może ja zrozumiem swoje błędy...

//Edit: Ja lubię projekty naukowe gdzie naukowcy się wielce głowią i dojść do rozwiązania nie mogą, a programiści baaardzo pomagają, tak że problem który do tej pory wydawał się trudny staje się nagle kwestią mało-skomplikowaną, wymagającą tylko dobrego napisania symulacji modelowej. Ja się lubie w takie rzeczy bawić, problem, racja, to reszta uczestników. Przecież na 4p pewnie nie dużo jest takich ludzi, więc najlepiej takie coś by było rozreklamować. Jak takie coś będzie, to jestem prawie pewny że TI z PŚk się podłapie prawie całe...

0

A czy potrzebny jest do tego w ogóle jakiś assembler? Moim zdaniem na początek wystarczą zwykłe skrypty, np. javascript, czy lua. Implementacja wręcz banalna jeśli chodzi o aplikacje win32. A jeśli to miałoby się rozgrywać na serwerze, to może wykorzystać php? zawodnik uploaduje skrypt, potem niedozwolone instrukcje są wycinane, no i eval()... :) Raczej nie ma sensu robić nic bardziej skomplikowanego, bo projekt po prostu padnie z braku implementatorów lub zawodników. A co do samej rozgrywki: myślę, że mało komu będzie się chciało bawić w jakieś zapełnianie pamięci, czy przejmowanie procesora. Tu potrzebne jest coś bardziej ludzkiego, przyziemnego :). Może jakieś walczące stworki, które opisywałyby odpowiednie statystyki? Tj. szybkość, odporność na ciosy, zadawane obrażenia, itp. I wtedy programista ma np. 20 punktów statystyk do rozdzielenia i ładuje w co mu się bardziej podoba. Potem adekwatny algorytm i można walczyć.

0

też gitoskie...

0

JS jako platforma?! Już brainfuck się lepiej nadaje. :/ Proponuję zamknięcie tematu - jak ktoś będzie coś wartościowego miał do dodania niech się zgłosi do moda\admina... taka dyskusja jak teraz do niczego nie prowadzi... Może wypadałoby zrobić nowy temat /ankietę/ z pytaniem czego chcecie - 'Konkurs', 'Badania', czy 'WisiMiTo' i ew. 'deus to idiota\zboczeniec ;P'. Szkoda, że nie można zmusić ludzi do opowiedzenia się po jednej ze stron... Johnny_Bit, sądzisz, że jeszcze coś z tego będzie?

edit:

pod wpływem jednego tematu naszła mnie taka refleksja: CoreWars z HLL to jak wirusy metamorficzne w C++ :/

0

deus, sądzę że to padnie jak domek zbudowany z wybuchających kart z Harrego Pottera ;-)

Swoją drogą niezależnie czy legnie czy nie, jeśli być chciał ze mną robić coś, to ja nadal jestem za core-wars. Po prostu lubię takie rzeczy, a współpracując przy takim czymś zapewne dużo bym się nauczył.

0
deus napisał(a)

JS jako platforma?! Już brainfuck się lepiej nadaje.

Czemu? JS zna sporo osób, więc odpada uczenie się jakichś specjalnych assemblerów, ma spore możliwości, jest do tego specjalna biblioteka od mozilli, więc implementacja prosta, jako że jest to skrypt, odpada etap kompilacji, którą trzeba by jakoś automatycznie przeprowadzić. Nie rozumiem, dlaczego assemblerowe instrukcje miałyby być wygodniejsze (w założeniu, że sterujemy np. tym wężem) od czegoś w rodzaju:

snake.goUp(), snake.biteHim(), itp.

Rozumiem, że chcesz stworzyć coś bardzo zaawansowanego, ale mowa była o konkursie, w którym mogłaby wziąć udział spora liczba osób. A tu? Najwyżej kilka najbardziej zaawansowanych osób podjęłoby wyzwanie. Przy prostszej grze nawet początkujący mogliby spróbować swoich sił, a zaawansowani i tak mogliby się popisać ciekawym algorytmem. To by było na tyle :P

0

zależy od podejścia. Dla mnie takie coś co proponuje thenkles jest git, mogę popatrzeć, ale zwisa mi to jak 280 ml silikonu akrylowego na agrafce pod sufitem... Z kolei maszynka jaką proponuje deus dla mnie też jest git z tym, że natychmiastowo "count me in!" jeśli zacznie się.

Swoją drogą, jeśli to miała być taka zwykła gierka, to czy musi to być to wredne js? Dobra, wiem że nie musi...

Co do samej gry (węże) to chyba nawet nie było czegokolwiek do gryzienia, tylko tak określone zostało zlokalizowanie się "przodu" węża z danym obiektem lub z samym sobą. Gra polegała na pokonaniu najkrótszą możliwą trasą do danego obiektu, dawało to kasę, dodatkowy czas, i zwiększało długość węża o "1". Jak by miała wyglądać gra na 2 węże, szczególnie jeśli by miała być grana przez program... Wiadomo że zasady by były stałe, szybkość ruchu węża też, jedyny "problem" inteligencji takiego węża sprowadzałby się do "gdzie iść" a było by tylko 3 odpowiedzi: prawo/lewo/prosto. Taki algorytm musiałby brać pod uwagę ile pozostało czasu, jakie przeszkody są po drodze i co się bardziej opłaca. Jeżeli zabicie drugiego węża było by instant-win, to przecież nie ma filozofii w tym żeby 2 węże poszły na siebie. Zasady to podstawa.

0
Johnny_Bit napisał(a)

zależy od podejścia. Dla mnie takie coś co proponuje thenkles jest git, mogę popatrzeć, ale zwisa mi to jak 280 ml silikonu akrylowego na agrafce pod sufitem... Z kolei maszynka jaką proponuje deus dla mnie też jest git z tym, że natychmiastowo "count me in!" jeśli zacznie się.

Fakt, kwestia podejścia. Choć na początku mowa była o czymś prostym, a nagle zaczęły wychodzić pomysły jakieś wręcz kosmiczne, więc staram się bronić początkowej idei ;)

Johnny_Bit napisał(a)

Swoją drogą, jeśli to miała być taka zwykła gierka, to czy musi to być to wredne js?

Nie, nie, to był tylko przykład, jak można zrobić interpreter małym kosztem, za to dość przyjazny dla programisty (wredny, czy nie, JS to dość wysoki poziom :P). Jeśli miałoby to być wprowadzone bez większych komplikacji, to najlepsze moim zdaniem byłoby PHP, bo można wykorzystać zwykły serwer HTTP.

Johnny_Bit napisał(a)

Co do samej gry (węże) to chyba nawet nie było czegokolwiek do gryzienia

Kwestia ustalenia zasad i w ogóle rodzaju gry, to był tylko przykład jak mógłby wyglądać kod :)

0

Pomysł z JS to idioctwo - trzeba by zdefiniować własne wewnętrzne dla SJS /wężowego JS/ obiekty, nieco poszerzyć i sprecyzować składnię...
Widzę do czego to zmierza i jak mam być szczery to wycofuję się z 'projektu' zanim całkiem upadnie, nie chę się trzymać martwej idei... A VM do walk vir'ów i tak napiszę dla przyjemności. Co do badań naukowych zaś - wstępnie się rozglądałem za miejscem, gdzie nasza pomoc mogłaby się przydać... ale to zostawię sobie dla siebie - zamiast 'działalności społecznej' może skończy się na etacie /nie widzę osób, które mogłyby przy tym za free pracować, traktując to jako przyjemność, mimo, że efekty tych prac mogłyby być bardzo ważne w przyszłości/.
Węże w JS, OMFG. Myślicie, że tacy cwani jesteście - nie Wy pierwsi wpadliście na pomysł prostych jak budowa cepa zawodów dla programistów, zgadnijcie czym się to skończyło? Niski poziom zapewniał możliwość startu zwykłym cywilom nie nadającym się na programistów... i stal się przyczyną upadku. Kto na dłuższą metę będzie się trzymać banałów, ludzie potrzebują wyzwań - widać to po mojej działalności w tematach związanych z asm /przez pewien czas pomagam jak mogę i gdzie mogę, ale takie banały są nużące, nie stanowią wyzwania i sobie na dłuższy czas odpuszczam/.
Dla kogo Wy to chcecie robić? Początkujący - syndrom małego ping-ponga, zaawansowani - za proste, nużące... i co, chętnych brak? To do czego dążyłem miało być wyzwaniem dla ludzi, którzy wiedzą czym jest programowanie, nie dla niedzielnych programistów, którzy mnożenie przez 0.5 rozpisują na int'ach jako (liczba*128) >> 8 i dziwią się, że kompilator generuje szybszy kod niż ten po dosłownym przepisaniu na asma... autentyk zaczerpnięty z jednego z ostatnich tematów w jakich się udzielałem.

Tak, czy inaczej - powodzenia w pracach na SJS czy inszym czymś, na czym zapewne oka nie zawiesze :/

p.s. temat ma ponad 300 wyświetleń na chwilę obecną - powiedzmy, że Johnny Bit i ja nabiliśmy po 20 czy nawet 30 a co z resztą czytań? Widzę, że ludzie wolą stać z boku niż opowiedzieć się za jedną ze stron... tak samo było z wyborami prezydenckimi

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