⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame1.java

📁 运用遗传算法对交通流进行分配
💻 JAVA
📖 第 1 页 / 共 3 页
字号:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class Frame1 extends JFrame {
  JPanel contentPane;
  JButton jButton1 = new JButton();
  JButton jButton2 = new JButton();
  JLabel jLabel1 = new JLabel();
  JLabel jLabel2 = new JLabel();
  JLabel jLabel3 = new JLabel();
  JLabel jLabel4 = new JLabel();
  JTextField jTextField1 = new JTextField();
  JTextField jTextField2 = new JTextField();
  JTextField jTextField3 = new JTextField();
  JTextField jTextField4 = new JTextField();
  JLabel jLabel5 = new JLabel();
  JLabel jLabel6 = new JLabel();
  JLabel jLabel7 = new JLabel();
  JLabel jLabel8 = new JLabel();
  JLabel jLabel10 = new JLabel();
  JLabel jLabel11 = new JLabel();
  JLabel jLabel12 = new JLabel();
  JTextArea jTextArea1 = new JTextArea();
  JTextField jTextField5 = new JTextField();
  JTextArea jTextArea2 = new JTextArea();
  JTextField jTextField6 = new JTextField();
  JScrollPane jScrollPane1 = new JScrollPane(jTextArea1);
  JScrollPane jScrollPane2 = new JScrollPane();
  JButton jButton3 = new JButton();

  //Construct the frame
  public Frame1() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception  {

    contentPane = (JPanel) this.getContentPane();
    jButton1.setBounds(new Rectangle(25, 25, 125, 25));
    jButton1.setFont(new java.awt.Font("Dialog", 0, 15));
    jButton1.setText("设置交通图");
    jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
    contentPane.setFont(new java.awt.Font("Dialog", 0, 15));
    contentPane.setMaximumSize(new Dimension(32767, 32767));
    contentPane.setInputVerifier(null);
    contentPane.setLayout(null);
    this.setSize(new Dimension(700, 550));
    this.setTitle("道路交通配流系统");
    jButton2.setBounds(new Rectangle(320, 120, 95, 25));
    jButton2.setFont(new java.awt.Font("Dialog", 0, 15));
    jButton2.setText("开始执行");
    jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));
    jLabel1.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel1.setText("交叉概率:");
    jLabel1.setBounds(new Rectangle(320, 35, 75, 25));
    jLabel2.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel2.setText("变异概率:");
    jLabel2.setBounds(new Rectangle(320, 75, 75, 25));
    jLabel3.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel3.setText("迭代次数:");
    jLabel3.setBounds(new Rectangle(500, 35, 75, 25));
    jLabel4.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel4.setText("样群数目:");
    jLabel4.setBounds(new Rectangle(500, 75, 75, 25));
    jTextField1.setFont(new java.awt.Font("Dialog", 0, 12));
    jTextField1.setText("0.75");
    jTextField1.setBounds(new Rectangle(395, 35, 55, 23));
    jTextField2.setFont(new java.awt.Font("Dialog", 0, 12));
    jTextField2.setText("0.01");
    jTextField2.setBounds(new Rectangle(395, 75, 55, 23));
    jTextField3.setFont(new java.awt.Font("Dialog", 0, 12));
    jTextField3.setText("10");
    jTextField3.setBounds(new Rectangle(575, 35, 55, 23));
    jTextField4.setFont(new java.awt.Font("Dialog", 0, 12));
    jTextField4.setText("20");
    jTextField4.setBounds(new Rectangle(575, 75, 55, 23));
    jLabel5.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel5.setText("求解出:");
    jLabel5.setBounds(new Rectangle(455, 138, 76, 27));
    jLabel6.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel6.setText("第");
    jLabel6.setBounds(new Rectangle(455, 182, 20, 29));
    jLabel7.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel7.setBounds(new Rectangle(477, 187, 18, 16));
    jLabel8.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel8.setText("代流量最小,最小值为:");
    jLabel8.setBounds(new Rectangle(493, 186, 167, 20));
    jLabel10.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel10.setText("相应的路径为:");
    jLabel10.setBounds(new Rectangle(455, 256, 112, 17));
    jLabel11.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel11.setIconTextGap(4);
    jLabel11.setText("实际最小流量为:");
    jLabel11.setBounds(new Rectangle(455, 391, 128, 22));
    jLabel12.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel12.setText("遗传算法执行过程:");
    jLabel12.setBounds(new Rectangle(30, 124, 144, 27));
    jTextArea1.setFont(new java.awt.Font("Dialog", 0, 13));
    jTextArea1.setDebugGraphicsOptions(0);
    jTextArea1.setEditable(false);
    jTextField5.setFont(new java.awt.Font("Dialog", 0, 15));
    jTextField5.setEditable(false);
    jTextField5.setText(" ");
    jTextField5.setBounds(new Rectangle(490, 221, 95, 25));
    jTextArea2.setFont(new java.awt.Font("Dialog", 0, 15));
    jTextArea2.setEditable(false);
    jTextArea2.setText("");
    jTextField6.setFont(new java.awt.Font("Dialog", 0, 15));
    jTextField6.setEditable(false);
    jTextField6.setText("");
    jTextField6.setBounds(new Rectangle(490, 423, 95, 25));
    jScrollPane1.setBounds(new Rectangle(31, 166, 385, 337));
    jScrollPane2.setBounds(new Rectangle(486, 285, 183, 94));
    jButton3.setBounds(new Rectangle(25, 70, 126, 25));
    jButton3.setFont(new java.awt.Font("Dialog", 0, 15));
    jButton3.setText("设置道路状况");
    jButton3.addActionListener(new Frame1_jButton3_actionAdapter(this));
    contentPane.add(jLabel12, null);
    contentPane.add(jTextField3, null);
    contentPane.add(jTextField4, null);
    contentPane.add(jLabel3, null);
    contentPane.add(jLabel4, null);
    contentPane.add(jTextField2, null);
    contentPane.add(jLabel1, null);
    contentPane.add(jLabel2, null);
    contentPane.add(jLabel5, null);
    contentPane.add(jLabel10, null);
    contentPane.add(jScrollPane1, null);
    jScrollPane1.getViewport().add(jTextArea1, null);
    contentPane.add(jScrollPane2, null);
    contentPane.add(jLabel11, null);
    contentPane.add(jLabel6, null);
    contentPane.add(jLabel8, null);
    contentPane.add(jLabel7, null);
    contentPane.add(jButton2, null);
    contentPane.add(jButton3, null);
    contentPane.add(jButton1, null);
    contentPane.add(jTextField1, null);
    contentPane.add(jTextField6, null);
    contentPane.add(jTextField5, null);
    jScrollPane2.getViewport().add(jTextArea2, null);

  }
  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void jButton2_actionPerformed(ActionEvent e) {

    try {


     BufferedReader in1 = new BufferedReader(new
              FileReader("traffic.dat"));
      String st="";
      st=in1.readLine();
      int vertexNum=Integer.parseInt(st);

      st=in1.readLine();
      int lineNum=Integer.parseInt(st);
      int[][] line=new int[lineNum][3];
      int[][] lineCap=new int[lineNum][3];
      for(int i=0;i<lineNum;i++){
        st=in1.readLine();
        StringTokenizer t = new StringTokenizer(st, "|");
        String value=t.nextToken();
        line[i][0]=Integer.parseInt(value);
        lineCap[i][0]=Integer.parseInt(value);
        value=t.nextToken();
        line[i][1]=Integer.parseInt(value);
        lineCap[i][1]=Integer.parseInt(value);
        value=t.nextToken();
        line[i][2]=Integer.parseInt(value);
        value=t.nextToken();
        lineCap[i][2]=Integer.parseInt(value);

      }


      in1.close();




      BufferedReader in2 = new BufferedReader(new
              FileReader("lines.dat"));
      st=in2.readLine();
      int alineNum=Integer.parseInt(st);
      int[][] aline=new int[alineNum][3];
      for(int i=0;i<alineNum;i++){
        st=in2.readLine();
        StringTokenizer f = new StringTokenizer(st, "|");
        String value=f.nextToken();
        aline[i][0]=Integer.parseInt(value);
        value=f.nextToken();
        aline[i][1]=Integer.parseInt(value);
        value=f.nextToken();
        aline[i][2]=Integer.parseInt(value);
      }




     in2.close();










       int [] c=new int[lineNum*2];
       int [] q=new int [lineNum*2];

       TraffMap traffMap=new TraffMap(vertexNum,line,lineCap,lineNum);


       Lines lines=new Lines(aline,alineNum);

       Search.searchLines(traffMap, lines);
       A a=new A(traffMap,lines);

           int aa[][];
           int verNum;//表示列数
           int horNum;//表示行数
           aa=a.getA();
           verNum=a.getVerNum();
           horNum=a.getHorNum();


      /*  for(int i=0;i<horNum;i++)
        {
          for(int j=0;j<verNum;j++)
            System.out.print(aa[i][j]+" ");
          System.out.println("") ;
        }*/

        //初始化c[]
        int [][] graph=traffMap.getTraffMap() ;
        int p=0;
        int num=traffMap.getVertexNum();
        for(int i=0;i<num;i++)
          for(int j=0;j<num;j++)
            if(graph[i][j]>0){c[p]=graph[i][j];p++;}

        //初始化q[]

        int cap[][]=traffMap.getLineCap();
        p=0;
        for(int i=0;i<num;i++)
          for(int j=0;j<num;j++)
            if(cap[i][j]>0){q[p]=cap[i][j];p++;}

        double g1=Double.parseDouble(jTextField1.getText());
        double g2=Double.parseDouble(jTextField2.getText());
        int g3=Integer.parseInt(jTextField3.getText());
        int g4=Integer.parseInt(jTextField4.getText());
        Genetic.genAlgorith(a,c,q,g1,g2,g3,g4) ;
        jLabel7.setText(""+Genetic.getK());
        jTextField5.setText(""+Genetic.getMinflux());
        String r="";
        int[] xc=Genetic.getXCopy();
        for(int i=0;i<verNum;i++)
          r=r+xc[i];
        String li=Genetic.getLines();
        jTextArea2.setText(""+li);
        jTextArea1.setText(""+Genetic.getProcess());



        //求出最小值
       long minfit=MinFit.GetMinFit(a,c);
       //System.out.println("最小值为:"+minfit);


       jTextField6.setText(""+minfit);
        } catch (IOException exception){   }

  }

  void jButton1_actionPerformed(ActionEvent e) {
  Frame2 frame2=new Frame2();


  frame2.setTitle("设置交通图");
  boolean packFrame = false;
  if (packFrame) {
     frame2.pack();
   }
   else {
     frame2.validate();
   }
   //Center the window
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   Dimension frameSize = frame2.getSize();
   if (frameSize.height > screenSize.height) {
     frameSize.height = screenSize.height;
   }
   if (frameSize.width > screenSize.width) {
     frameSize.width = screenSize.width;
   }
   frame2.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
   frame2.setVisible(true);

  }

  void jButton3_actionPerformed(ActionEvent e) {
    Frame3 frame3=new Frame3();


   frame3.setTitle("设置道路车辆状况");
   boolean packFrame = false;
   if (packFrame) {
      frame3.pack();
    }
    else {
      frame3.validate();
    }
    //Center the window
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame3.getSize();
    if (frameSize.height > screenSize.height) {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width) {
      frameSize.width = screenSize.width;
    }
    frame3.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    frame3.setVisible(true);

  }
}

class  TraffMap   {

 private int vertexNum;//交通图的节点数
 private int graph[][]=new int[1000][1000];//交通图
 private int capacity[][]=new int[1000][1000];//线路容量

public TraffMap( int verNum,int line[][],int [][] lineCap,int lineNum){//verNum表示交通图节点数,line表示路线集合,lineNum表示线路数

  vertexNum=verNum;
  int i,j;

  for( i=0;i<vertexNum;i++)
   for( j=0;j<vertexNum;j++)
    {graph[i][j]=0;capacity[i][j]=0;}

  for(i=0;i<lineNum;i++)
   {createMGraph(line[i][0],line[i][1],line[i][2],graph);
    createMGraph(lineCap[i][0],lineCap[i][1],lineCap[i][2],capacity);

  }

  }



 public void createMGraph( int vertice1,int vertice2,int value,int[][] gra){
      gra[vertice1][vertice2]=value;
      gra[vertice2][vertice1]=value;
   }

 public int[][] getTraffMap(){
  return graph;
 }

 public int getVertexNum(){
  return vertexNum;
 }

 public int[][] getLineCap(){
 return capacity;
 }

}


 class  Search  {
   private static int graph[][];
   private static int vertexNum;
   private static int aline[][];
   private static int lineNum;



   public static void searchLines(TraffMap traffMap,Lines lines){

    graph=traffMap.getTraffMap();
    vertexNum=traffMap.getVertexNum();
    aline=lines.getLines();
    lineNum=lines.getLineNum();

   try
    {
    PrintWriter out = new PrintWriter(new FileWriter("a.dat"));
    String line="";
     for(int i=0;i<lineNum;i++){
     out.println(aline[i][0]+"-"+aline[i][1]);
     boolean m=dfs(aline[i][0],aline[i][1],graph,line, out);
     if(m==false)
     System.out.print("sorry");
     out.println("");
    }
    out.println("over");
    out.close();}
    catch (IOException exception)
       {   }
   }


   private static boolean dfs(int vertex1,int vertex2, int [][]grp,String lj,PrintWriter out){

   int [][] grpCopy=new int  [vertexNum][vertexNum];//用于减少图的节点

   for(int i=0;i<vertexNum;i++)
   for(int j=0;j<vertexNum;j++){

    grpCopy[i][j]=grp[i][j];}

   boolean p=false;//p表示是否可以搜索到该路径,初始为false,只要一次搜索成功即为true
   int i,s=1;//i用于循环,s用于控制是否执行递归
//中止操作
   boolean m=false;//表示是否该停止递归

   for(int l=0;l<vertexNum;l++)
   for(int k=0;k<vertexNum;k++){
    if(grpCopy[l][k]>0)m=true;//如果图中没有路径了,则停止递归m=false否则m=true
    }

  if(m==false||vertex1==vertex2){//如果继续递归或者目的和起始节点相同则停止
    p=false;s=0;
  }

   if(graph[vertex1][vertex2]>0){//如果可以直接到达则直接输出路径,但是还要继续搜索
   out.println(lj+vertex1+"|"+vertex2+"|");
   p= true;
   }

//否则去掉点vertex1
   lj=lj+vertex1+"|";
   for(i=0;i<vertexNum;i++){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -