Operacje bitowe Java

0

Witam

Na samym przepraszam za temat ale nie wiedziałem jak go zatytułować. Przejdźmy do problemu, a wygląda on tak, robie taki projekt który symuluje prace algorytmów genetycznych dla problemu plecakowego, jestem na etapie konczenia interfejsu użytkownika.

Problem plecakowy polega na tym że posiadamy n-liste elementów z czego każdy zcharakteryowany jest 3 cechami: indeksem, objętością i wartością oraz plecak o określonej pojemności. Musimy wybierać elementy tak aby mieściły się w plecaku i i miały łącznie największa wartość.

Odnośnie wprowadzania danych, mam funkcje generująca dane do stworzenia populacji i mam juz to zrobione na tablicach tj. tablica zawiera kolejne zestawy elementów mieszczących się w plecaku np 1 2 3 4 8 6 43,32 54,21 gdzie 1 to indeks zestawu kolejne 5 cyfr to elementy wchodzące w sklad zestawu nastepny to suma objętosci tych elementów a kolejny to suma wartości.

I mój problem polega na tym by obiekt populacji był reprezentowany przez liczbe bitów wszystkich elementów tj jesli jest 80 elementów z ktorych mozemy losować zestawy do plecaka to każdy z nowo stworzonych zestawow bedzie mial 80-bitowa reprezentacje gdzie jedynki beda mówić że dany element wchodzi w skład tego zestawu np : 001011 tutaj np elementy o indeksach 2,4,5 wchodza w sklad tego zestawu. I tu jest mój problem bo za bardzo nie wiem jak to przedstawić w javie, i czy w ogóle jest to możliwe w Javie ?

0

Ja bym zapytał raczej "po co"? Przecież to ci tylko utrudni życie bo będziesz musiał potem te bity wyciągać żeby policzyć fitness. Taka bitowa reprezentacja ma sens jak możesz liczyć fitness bezpośrednio z takiego zlepku bitów (bo np. fitness to zwykła funkcja f: R->R a bity traktujesz jako argument funkcji). U ciebie takiej możliwości nie ma ergo taka zmiana reprezentacji tylko ci utrudni cały algorytm.

0

Ale niestety muszę dla 2 takich sposobów aby porównać szybkość działania algorytmu. Shalom tak po za tematem ty masz jakieś doświadczenia z biblioteką GALib ?

0

Jeszcze będe kontynuował ten wątek, tylko teraz troszeczke inny temat.

Otóż , czy ktoś z was forumowiczów korzystał kiedyś z biblioteki GALib podejrzewam ze bedzie mógł mi pomoć. Przechodząc do sedna jak w poście wyżej wspomniałem mam rozwiązać problem plecakowy i postępuje tak :

  1. Napisałem funkcje generującą dane tj. elemny każdy element posiada objetosc zakres i indeks
  2. Następnie napisałem funkcję która tworzy różne zestawy które zmieszczą się do plecaka zapisuje to w tablicy dwuwymiarowej mniej wieceja tak {{2,3,5},{5,8,4},{4,21}}, gdzie cyfry oznaczaja indeksy elementów wchodzących w skład zestawu przy czym suma ich objętośći nie przekracza zadanej pojemnośći plecaka.

Nie jestem pewien czy postępuje dobrze. Chce teraz wykorzystać klasy biblioteki GALib ale nie wiem jak sie za to zabrać myślałem że podam funkcji getFitness jako argument tą tablice dwuwymiarową gdzie dla niej będą przeprowadzane operacje krzyżowania i mutacji, ale dalej nie wiem jak ustawić żeby uśmiercać osobniki populacji które po mutacji bądź krzyżowaniu przekraczaja pojemność plecaka podejrzewam że należy użyć klasy GAFloat ale nie mogę tego rozgryźć i znaleŹć jakiś przykład użycia tych bibliotek.

Z góry dziękuje za pomoc.

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