Wypowiedzi
-
Kod źródłowy tej symulacji jest prosty, jest mi znany podobny przykład. Tak, jest to praca ale nie na zaliczenie. To co opisałem, to jest tylko prosty przykład, przedstawiający mój program. Mam dość dużą paczkę wykonującą czasochłonne obliczenia (duża sieci neuronowe) i chciałem sterować siecią, wyświetlać różnego typu wyniki w kilku oknach itd. W najgorszym razie zostanie tak jak jest, też działa. Aby skorzystać z tego przykładu muszę trochę zmodyfikować klasy. Program mógłby z powodzeniem działać w konsoli i nie byłoby problemów, ale to nie te czasy.
Dzięki za pomoc.
Pozdrawiam -
Dzięki na odpowiedź. Trochę się rozjaśniło, ale jestem na poziomie podstawowym i sprawia mi to problem. Z powodu braku czasu chyba zrobię to za pomocą dodatkowego obiektu ze statycznymi polami, za pomocą których będą się mogły komunikować obie klasy. Widzę, że będę potrzebował więcej czasu zrozumienie wielowątkowości.
Jakby ktoś to potrafił wytłumaczyć na prostym przykładzie to byłbym wdzięczny. Myślę, że jeszcze komuś by się to przydało.
Przykład może składać się z trzech klas:
- klasa generująca całkowite liczby losowe z konkretnego przedziału np. od 0 do 100 i zlicza ilość trafień danej liczby;
- klasa znajdująca się w innej paczce tworzy co pewien czas histogram tych wylosowanych liczb;
- trzecia klasa służy do komunikacji między tymi klasami i ewentualnemu sterowaniu przebiegiem klasy generującej liczby losowe (zatrzymuje, wznawia działanie).
Klasa pierwsza i druga są oddzielnie od siebie.
Pozdrawiam -
Witam,
Mam problem z wykorzystaniem SwingWorker. Chcę w oddzielnych plikach stworzyć klasę, która wykonuje czasochłonne obliczenia i interfejs graficzny, który te wyświetla postęp tych obliczeń. Klasa licząca i interfejs graficzny znajdują się w osobnych paczkach. Z tego co czytałem to jest to tworzone w jednym pliku za pomocą klas wewnętrznych. Jest jakiś sposób na rozdzielenie tych klas? Chodzi mi o to aby program liczący co jakiś czas (np. co jedną minutę) wyrzucał wynik, który ma służyć do rysowania wykresu. Co prawda mogę to zrobić w inny sposób, ale wolałbym za pomocą SwingWorker. Chciałbym to zrobić w miarę elegancki sposób. Program działa na liczbach. -
Temat już nie aktualny.
-
Za błędy przepraszam i za brak konsekwencji (raz nazwy pl, raz ang a raz moje :| ). Tak, czasami chyba mam za dużo tych błędów.
-
Błąd już nie występuje. Nie mam pojęci co powodowało błąd, ale już się naprawiło. Może to system, ale nie będę zgadywał. Jakby komuś było potrzebne to podje metody zapisujące i odczytujące obiekty na/z dysku:
/**
* Odczyt
* @param sciezka do pliku
* @return pobrany objekt
*/
public static Object[] getObject(String sciezka) {
Object[] tf; // tablice Object
try {
ObjectInputStream ois =
new ObjectInputStream(
new FileInputStream(sciezka)
);
tf = (Object[]) ois.readObject();
ois.close();
} catch (Exception e) {
System.out.println("Blad odczytu.\"getObject\"");
return null;
}
System.out.println("Odczyt poprawny \"getObject\"");
return tf;
}
/**
* Zapis
* @param wektor
* @param sciezka
*/
public static void zapiszObiekt(Object[] wektor, String sciezka){
try {
ObjectOutputStream oos =
new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(sciezka)
)
);
oos.writeObject(wektor);
oos.flush();
oos.close();
} catch (Exception e) {
System.out.println("Blad zapisu do "+sciezka);
return;
}
}Wiesław Kurko edytował(a) ten post dnia 11.05.09 o godzinie 09:13 -
Cały kod jest sporych rozmiarów, ale sposób tworzenia, zapisywania jest następujący:
Object[] objekt=new Object[5];
objektTemp=new Object[con1Wymiar][6];
for(int i=0;i<con1Wymiar;i++)
{
objektTemp[i][0]=con1[i].getWagi();
objektTemp[i][1]=con1[i].getDWag();
objektTemp[i][2]=con1[i].getOldDWag();
objektTemp[i][3]=con1[i].getBias();
objektTemp[i][4]=con1[i].getDBias();
objektTemp[i][5]=con1[i].getOldDBias();
}
objekt[0]=objektTemp;
objektTemp=new Object[con2Wymiar][6];
for(int i=0;i<con2Wymiar;i++)
{
objektTemp[i][0]=con2[i].getWagi();
objektTemp[i][1]=con2[i].getDWag();
objektTemp[i][2]=con2[i].getOldDWag();
objektTemp[i][3]=con2[i].getBias();
objektTemp[i][4]=con2[i].getDBias();
objektTemp[i][5]=con2[i].getOldDBias();
}
objekt[1]=objektTemp;
objektTemp=new Object[1][6];
objektTemp[0][0]=fc1.getWagi();
objektTemp[0][1]=fc1.getDWag();
objektTemp[0][2]=fc1.getOldDWag();
objektTemp[0][3]=fc1.getBias();
objektTemp[0][4]=fc1.getDBias();
objektTemp[0][5]=fc1.getOldDBias();
objekt[2]=objektTemp;
objektTemp=new Object[1][6];
objektTemp[0][0]=fc2.getWagi();
objektTemp[0][1]=fc2.getDWag();
objektTemp[0][2]=fc2.getOldDWag();
objektTemp[0][3]=fc2.getBias();
objektTemp[0][4]=fc2.getDBias();
objektTemp[0][5]=fc2.getOldDBias();
objekt[3]=objektTemp;
objektTemp=new Object[1][6];
objektTemp[0][0]=fc3.getWagi();
objektTemp[0][1]=fc3.getDWag();
objektTemp[0][2]=fc3.getOldDWag();
objektTemp[0][3]=fc3.getBias();
objektTemp[0][4]=fc3.getDBias();
objektTemp[0][5]=fc3.getOldDBias();
objekt[4]=objektTemp;
ZapiszObjekt.zapiszObiekt(objekt,
"SiecV3_3_1\\..\\WspolneWagi\\WB_"+nazwaUczonejSieci);
jak wynika z kodu wszystko powinno być ok. Może robię jakiś błąd. Lepiej może dopisać nowe klasy do przechowywania tablic i wykorzystać mechanizm serializacji?
Tak przy okazji. Zapisując tablicę o dużych wymiarach (kilka tyś.) do pliku txt to czas znacząco się wydłuża nawet do kilku minut. Jest to wykładniczy wzrost. Jak można zapisywać wydajnie takie tablice do pliku txt?Wiesław Kurko edytował(a) ten post dnia 09.05.09 o godzinie 10:56 -
Witam,
Tworze tablicę Object, w miej umieszczam tablicę float i zapisuje na pamięci USB. Gdy wczytuje ponownie to liczby zapisane są średnio o 0.02 różne od tych które zapisałem.
Jak naprawić ten błąd? Może jest inny, lepszy sposób na zapisywanie tablic na dysk? -
Witam,
Właśnie jestem w trakcie pisania programu implementującego CNN i mam niestety poważne problemy, aby zmusić ją do uczenia się. Czy ktoś się interesuje tym zagadnieniem i byłby w stanie mi pomóc?
Pozdrawiam
Wiesław