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

📄 search.java

📁 用一个非线性规划算法解决一个飞行管理问题,该题源自全国大学生数学建模竞赛。
💻 JAVA
字号:
public class search
{ public static void main(String[] args)
  { boolean [][] number=new boolean[6][6];
    double x[]={0,150,85,150,145,130};
    double y[]={0,140,85,155,50,150};
    double h[]={Math.PI*52/180,Math.PI*243/180,Math.PI*236/180,Math.PI*220.5/180,Math.PI*159/180,Math.PI*230/180};
    double v=800;
    double [] t=new double[6];
    double [][] T=new double[6][6];
    double a,b,c;
    double [][] d=new double[6][6];
    double range=Math.PI*30/180;
    double step=Math.PI*1/180;
    double g[]={Math.PI*52/180,Math.PI*243/180,Math.PI*236/180,Math.PI*220.5/180,Math.PI*159/180,Math.PI*230/180};
    double f[]={Math.PI*52/180,Math.PI*243/180,Math.PI*236/180,Math.PI*220.5/180,Math.PI*159/180,Math.PI*230/180};
    double e[]={Math.PI*52/180,Math.PI*243/180,Math.PI*236/180,Math.PI*220.5/180,Math.PI*159/180,Math.PI*230/180};
    double tempMinJ=0,MinJ=Math.PI*30/180;
    int i1=1,i2=2,i3=4,i4=5,i5=3,i6=0;
    int count1=0,count2=0,count3=0,count4=0,count5=0,count6=0;
    boolean flag=true;
   /* while (Math.abs(g[i1]-h[i1])<=range)
    {h[i2]=g[i2];
     count2=0;
     while (Math.abs(g[i2]-h[i2])<=range)
     {h[i3]=g[i3];
      count3=0;
      while (Math.abs(g[i3]-h[i3])<=range)
      {h[i4]=g[i4];
       count4=0; */
       while (Math.abs(g[i4]-h[i4])<=range)
       {h[i5]=g[i5];
        count5=0;
        while (Math.abs(g[i5]-h[i5])<=range)
        {h[i6]=g[i6];
         count6=0;
         while (Math.abs(g[i6]-h[i6])<=range)
         {
               for(int i=0;i<=5;i++)
                  {if ((h[i]>=0)&(h[i]<=Math.PI/2))
                    t[i]=Math.min((160-x[i])/(v*Math.cos(h[i])),(160-y[i])/(v*Math.sin(h[i])));
                   if((h[i]>Math.PI/2)&(h[i]<=Math.PI))
                    t[i]=Math.min((-1)*x[i]/(v*Math.cos(h[i])),(160-y[i])/(v*Math.sin(h[i])));
                   if((h[i]>Math.PI)&(h[i]<=Math.PI*3/2))
                    t[i]=Math.min((-1)*x[i]/(v*Math.cos(h[i])),(-1)*y[i]/(v*Math.sin(h[i])));
                   if((h[i]>Math.PI*3/2)&(h[i]<=Math.PI*2))
                    t[i]=Math.min((160-x[i])/(v*Math.cos(h[i])),(-1)*y[i]/(v*Math.sin(h[i])));
                    }
                for (int i=0;i<=4;i++)
                 for (int j=i+1;j<=5;j++)
                    T[i][j]=Math.min(t[i],t[j]);
                for(int i=0;i<=4;i++)
                 for(int j=i+1;j<=5;j++)
                {a=Math.pow(v,2)*(Math.pow(Math.cos(h[i])-Math.cos(h[j]),2)+Math.pow(Math.sin(h[i])-Math.sin(h[j]),2));
                 b=v*((x[i]-x[j])*(Math.cos(h[i])-Math.cos(h[j]))+(y[i]-y[j])*(Math.sin(h[i])-Math.sin(h[j])));
                 c=Math.pow(x[i]-x[j],2)+Math.pow(y[i]-y[j],2);
                 if(b>=0)
                 d[i][j]=c;
                 if(b<0&b>(-1)*a*T[i][j])
                d[i][j]=c-Math.pow(b,2)/a;
                 if (b<=(-1)*a*T[i][j])
                d[i][j]=a*Math.pow(T[i][j],2)+2*b*T[i][j]+c;}
                flag=true;
                outerfor:
                for(int i=0;i<=4;i++)
                 for(int j=i+1;j<=5;j++)
                  if (d[i][j]<=64)
                   {flag=false;
                    break outerfor;
                   }
                   if (flag==true)
                 { for(int i=0;i<=5;i++)
                    tempMinJ=tempMinJ+Math.abs(h[i]-e[i]);
                   if(tempMinJ<MinJ)
                    {MinJ=tempMinJ;
                     for(int i=0;i<=5;i++)
                      f[i]=h[i];
                    }
                    tempMinJ=0;
                  }
               count6++;
               if(count6%2==0)
                 h[i6]=g[i6]-count6/2*step;
               else
                 h[i6]=g[i6]+(count6+1)/2*step; }
               count5++;
               if(count5%2==0)
                 h[i5]=g[i5]-count5/2*step;
               else
                 h[i5]=g[i5]+(count5+1)/2*step; }
               count4++;
               if(count4%2==0)
                 h[i4]=g[i4]-count4/2*step;
               else
                 h[i4]=g[i4]+(count4+1)/2*step; }
              /* count3++;
               if(count3%2==0)
                 h[i3]=g[i3]-count3/2*step;
               else
                 h[i3]=g[i3]+(count3+1)/2*step; }
               count2++;
               if(count2%2==0)
                 h[i2]=g[i2]-count2/2*step;
               else
                 h[i2]=g[i2]+(count2+1)/2*step; }
               count1++;
               if(count1%2==0)
                 h[i1]=g[i1]-count1/2*step;
               else
                 h[i1]=g[i1]+(count1+1)/2*step; }*/
         if(MinJ<Math.PI*30/180)
         {System.out.println("MinJ="+MinJ*180/Math.PI);
          for(int i=0;i<=5;i++)
           System.out.println("f["+i+"]="+f[i]*180/Math.PI);
         }
         else
          System.out.println("search false");
   }
}  
   

⌨️ 快捷键说明

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