/** The main loop for the background thread. It is here that most of the work os orchestrated. */ public void run() { double thisCost = 500.0; double oldCost = 0.0; double dcost = 500.0; int countSame = 0; map.update(map.getGraphics()); while (countSame < 100) { generation++; int ioffset = matingPopulationSize; int mutated = 0; // Mate the chromosomes in the favoured population // with all in the mating population for (int i = 0; i < favoredPopulationSize; i++) { Chromosome cmother = chromosomes[i]; // Select partner from the mating population int father = (int) (0.999999 * Math.random() * (double) matingPopulationSize); Chromosome cfather = chromosomes[father]; mutated += cmother.mate(cfather, chromosomes[ioffset], chromosomes[ioffset + 1]); ioffset += 2; } // The new generation is in the matingPopulation area // move them to the correct area for sort. for (int i = 0; i < matingPopulationSize; i++) { chromosomes[i] = chromosomes[i + matingPopulationSize]; chromosomes[i].calculateCost(cities); } // Now sort the new mating population Chromosome.sortChromosomes(chromosomes, matingPopulationSize); double cost = chromosomes[0].getCost(); dcost = Math.abs(cost - thisCost); thisCost = cost; double mutationRate = 100.0 * (double) mutated / (double) matingPopulationSize; NumberFormat nf = NumberFormat.getInstance(); nf.setMinimumFractionDigits(2); nf.setMinimumFractionDigits(2); status.setText( "Generation " + generation + " Cost " + (int) thisCost + " Mutated " + nf.format(mutationRate) + "%"); if ((int) thisCost == (int) oldCost) { countSame++; } else { countSame = 0; oldCost = thisCost; } map.update(map.getGraphics()); } status.setText("Solution found after " + generation + " generations."); }
public void updateStates() { NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(2); nf.setMinimumFractionDigits(2); try { // System.out.println("getting variables."); status = cryo.cryoGetStatusCORBA(); frame.lblStatus.setText(statusString[status] + " "); heater = cryo.cryoGetHeaterCORBA(); frame.lblHeater.setText(nf.format(heater) + " watts"); temp = cryo.cryoGetTempCORBA(); frame.lblTemp.setText(nf.format(temp) + " deg"); cli = cryo.cryoGetCliCORBA(); if (Double.isNaN(cli)) { frame.lblCli.setText(cli + " "); } else frame.lblCli.setText(nf.format(cli) + " "); } catch (org.omg.CORBA.COMM_FAILURE cf) { // stop thread and try to reconnect to the server frame.lblStatus.setText("FAILURE!! Server connected?"); stop = true; return; } }
public MainCitiesCriteriaPanel() { super(new BorderLayout()); CountryController countryc = Application.getCountryController(); CitiesController citiesc = Application.getCitiesController(); countryName = Application.getCountryName(); label = new JLabel(); labelPanel = new JPanel(); labelPanel.add(label); label.setText("Criteria to select main cities for " + countryName.replaceAll("_", " ")); listModel = new DefaultListModel(); Iterator<HashMap<String, String>> iter = citiesc.getToponymTypesIterator(); while (iter.hasNext()) { String topTypeName = iter.next().get("code"); listModel.addElement(topTypeName); } list = new JList(listModel); list.addListSelectionListener(this); listPanel = new JScrollPane(list); NumberFormat nCitiesFormat = NumberFormat.getInstance(); nCitiesFormat.setMaximumFractionDigits(0); nCitiesFormat.setMaximumIntegerDigits(4); NumberFormat distFormat = NumberFormat.getInstance(); distFormat.setMaximumFractionDigits(0); distFormat.setMaximumIntegerDigits(3); nCitiesField = new JFormattedTextField(nCitiesFormat); distField = new JFormattedTextField(distFormat); nCitiesField.setMaximumSize(new Dimension(50, 1)); distField.setMaximumSize(new Dimension(50, 1)); rb1 = new JRadioButton("Filter by type", true); rb2 = new JRadioButton("Filter by number", false); rb3 = new JRadioButton("Filter by distance to the borders (km)", false); ButtonGroup bgroup = new ButtonGroup(); bgroup.add(rb1); bgroup.add(rb2); bgroup.add(rb3); JPanel radioPanel = new JPanel(); radioPanel.setLayout(new BoxLayout(radioPanel, BoxLayout.Y_AXIS)); radioPanel.add(rb1); radioPanel.add(listPanel); radioPanel.add(rb2); radioPanel.add(nCitiesField); radioPanel.add(rb3); radioPanel.add(distField); submit = new JButton(); back = new JButton(); submit.setText("OK"); back.setText("GO BACK"); submit.addActionListener(this); back.addActionListener(this); buttonPanel = new JPanel(); buttonPanel.add(back); buttonPanel.add(submit); add(labelPanel, BorderLayout.NORTH); add(radioPanel, BorderLayout.CENTER); add(buttonPanel, BorderLayout.SOUTH); }