protected void recalcV(Sign tl, int pos, Node destination, boolean light, int Ktl) { /* The calculation of the V values in TC-3 */ float newVvalue; float tempSumGreen=0, tempSumRed=0; float V; int[] amount = count(tl, pos, destination); int tlId = tl.getId(); int desId = destination.getId(); float total = (float) amount[green_index] + (float) amount[red_index]; newVvalue = va_table[tl.getId()][pos][destination.getId()]; CountEntry currentsituation_green = new CountEntry (tl, pos, destination, green, tl, pos, Ktl); CountEntry currentsituation_red = new CountEntry (tl, pos, destination, red, tl, pos, Ktl); Enumeration e = pKtl_table[tlId][pos][desId].elements(); while(e.hasMoreElements()) { //Green part PKtlEntry P = (PKtlEntry) e.nextElement(); if(P.sameSourceKtl(currentsituation_green) != -1) { try { V = v_table[P.tl_new.getId()][P.pos_new][destination.getId()]; tempSumGreen += P.getValue() *gamma * V; } catch (Exception excep) { System.out.println(excep+""); excep.printStackTrace(); } } //Red Part if(P.sameSourceKtl(currentsituation_red) != -1) { try { V = v_table[P.tl_new.getId()][P.pos_new][destination.getId()]; tempSumRed += P.getValue() *gamma * V; } catch (Exception excep) { System.out.println("ERROR in recalc V2"); System.out.println(excep+""); excep.printStackTrace(); } } } newVvalue += ((float)amount[green_index]/ (float)total) * tempSumGreen + ((float)amount[red_index]/ (float)total) * tempSumRed; try { v_table[tl.getId()][pos][destination.getId()] = newVvalue; } catch (Exception excep) { System.out.println("Error in v"); } }
protected void recalcQ(Sign tl, int pos, Node destination, boolean light, Sign tl_new, int pos_new, PosMov[] posMovs, int Ktl) { /* The calculation of the Q values in TC-3 */ float newQvalue = qa_table[tl.getId()][pos][destination.getId()][light?green_index:red_index]; float V=0; // Waarom splitst TC2 wel op rood/groen, en TC3 niet?? CountEntry currentsituation = new CountEntry (tl, pos, destination, light, tl_new, pos_new, Ktl); Enumeration e = pKtl_table[tl.getId()][pos][destination.getId()].elements(); while(e.hasMoreElements()) { PKtlEntry P = (PKtlEntry) e.nextElement(); if(P.sameSourceKtl(currentsituation) != -1.0f) { try { V = v_table[P.tl_new.getId()][P.pos_new][destination.getId()]; } catch (Exception excep) { System.out.println("ERROR in q"); } // Moet er hier geen reward functie?? newQvalue += P.getValue() *gamma * V; } } q_table[tl.getId()][pos][destination.getId()][light?green_index:red_index] = newQvalue; //sign, pos, des, color (red=0, green=1) }