@Override public int getDecyzjaSterujaca(float ocenaStanu, int[] stan, int iloscAkcji) { int akcja = 0; System.out.println("Ilość akcji:" + iloscAkcji); // Sprawdzenie czy istnieje choć jedna niepusta kolejka boolean niepuste = false; for (int i = 0; i < serwer.getIloscKolejek(); i++) { if (serwer.getKolejka(i).getIloscZgloszen() > 0) { niepuste = true; // break; } System.out.print(serwer.getKolejka(i).getIloscZgloszen() + " : "); } System.out.println(); // Wylosowanie kolejki, jeżeli choć jedna jest niepusta if (niepuste) { do { akcja = generator.nextInt(iloscAkcji); System.out.println("Decyzja sterująca: " + akcja); } while (serwer.getKolejka(akcja).getIloscZgloszen() == 0); } return akcja; }
@Override protected void konfiguracjaMetoda2(Serwer serwerBadania) { setParametryPodstawowe(serwerBadania); IStan reprezentacjaStanu; // reprezentacjaStanu = new StanLiczbaSpelnionychOgraniczen(); reprezentacjaStanu = new StanSortowanLiczbaZgloszenZOgraniczeniami(); // reprezentacjaStanu = new StanSortowanyCzasOczekiwaniaZOgraniczeniami(); serwerBadania.setReprezentacjaStanu(reprezentacjaStanu); // FunkcjaOceny_I fOceny = new OcenaTimeRosnacoOrginalna(c1,c2,c3); FunkcjaOceny_I fOceny = new OcenaTimeRosnacoOrginalna2(c1, c2, c3, C4); serwerBadania.setFunkcjaOceny(fOceny); // Strategia_A strategiaEzachlanna = new StrategiaSoftMax( T_START, T_KONIEC, T_ITERACJI, serwerBadania.getMaxStanow(), serwerBadania.getIloscAkcji()); Sterownik sterownik; sterownik = new QLearning(strategiaEzachlanna, alfa, gamma); serwerBadania.setSterownik(sterownik); }
/** @return Zwraca wartość jeżeli nastąpiła poprawa stanu */ protected float getR_stan(Serwer serwer) { float result = 0; Porownanie p = serwer.getReprezentacjaStanu().compare(serwer, poprzedniStan); if (p == Porownanie.Lepszy) { result = c3; } // if(p != Porownanie.NieMoznaPorownac) { // result = c3 * serwer.getReprezentacjaStanu().compareWspolczynnik(serwer, poprzedniStan); // } return result; }
/* * Średnia ważona ilości zgłoszeń * @see pl.wroc.pwr.iis.polling.model.ocena.ModulOceniajacy#ocenaSytuacji(pl.wroc.pwr.iis.polling.model.object.Serwer) */ public double ocenaSytuacji(Serwer serwer) { float r_time = 0; for (int i = 0; i < serwer.getIloscKolejek() - 1; i++) { Kolejka kolejka = serwer.getKolejka(i); double r_time_i = 0; double R = kolejka.getMaxCzasOczekiwania(); // float M = kolejka.getSredniCzasOczekiwania(); double M = kolejka.getCzasOczekiwania(); if (M <= R) { r_time_i = c1 * M / (-3.0 * R * R) + 4.0 / 3.0 * c1; } else { r_time_i = c2 / R * M * -.5; // r_time_i = -0.1*(c2*M/R); } float W = kolejka.getWaga(); r_time += r_time_i * W; } Kolejka kolejka = serwer.getKolejka(serwer.getIloscKolejek() - 1); // float M = kolejka.getSredniCzasOczekiwania(); double M = kolejka.getCzasOczekiwania(); maxR = Math.max(M, maxR); // double d = ((-c4*M/maxR) + c4); double d = -M / (float) c4; r_time += d; float r_stan = getR_stan(serwer); // Zapisanie stanu this.poprzedniStan = serwer.getReprezentacjaStanu().getStan(serwer); return r_time + r_stan; }
private void setParametryPodstawowe(Serwer serwerBadania) { serwerBadania.setMaxZgloszen(50); // serwer1.setMaxCzasOczekiwania(200); serwerBadania.getKolejka(0).setMaxCzasOczekiwania(100); serwerBadania.getKolejka(1).setMaxCzasOczekiwania(60); serwerBadania.getKolejka(2).setMaxCzasOczekiwania(40); serwerBadania.getKolejka(3).setMaxCzasOczekiwania(Integer.MAX_VALUE); // Serwer za kazdym razem obsluguje tylko jedno zgloszenie serwerBadania.setRozkladCzasuObslugi(new RozkladJednostajnyDyskretny(1)); // serwer1.setRozkladIlosciPrzybyc(new RozkladRownomierny(0,3)); serwerBadania.getKolejka(0).setRozkladIlosciPrzybyc(new RozkladBernouliego(15)); serwerBadania.getKolejka(1).setRozkladIlosciPrzybyc(new RozkladBernouliego(15)); serwerBadania.getKolejka(2).setRozkladIlosciPrzybyc(new RozkladBernouliego(20)); serwerBadania.getKolejka(3).setRozkladIlosciPrzybyc(new RozkladBernouliego(45)); serwerBadania.setRozkladCzasuNastawy(new RozkladJednostajnyDyskretny(0)); serwerBadania.setWaga(1); }