📄 frame1.java
字号:
for(i=0;i<length;i++){
n=n+xy[i];
for(j=ncopy;j<n;j++)
if(x[j]==1)z[i]=j-ncopy;
ncopy=n;
}
return z;
}
public static int[][] Multiply(int a[][],int vertice1,int vertice2,int b[][],int vertice3,int vertice4){
int [][] c=new int [vertice1][vertice4];
if(vertice2!=vertice3){
System.out.print("error!");
return c;
}
for(int i=0;i<vertice1;i++)
for(int j=0;j<vertice4;j++)
{
//计算c[i][j]的值
c[i][j]=0;
for(int m=0;m<vertice2;m++){
c[i][j]=c[i][j]+a[i][m]*b[m][j];
}
}
return c;
}
public static boolean judge(int a[][],int horNum,int verNum,int x[],int [] q){
boolean p=true;
int[] qCopy=new int[1000];
for(int i=0;i<horNum;i++)
{
qCopy[i]=0;
for(int j=0;j<verNum;j++)
if(x[j]==1)qCopy[i]=qCopy[i]+a[i][j];
if(qCopy[i]>q[i])p=false;
}
return p;
}
public static long getZ(int a[][],int horNum,int verNum,int x[],int[] c){
long z=0;
int[] qCopy=new int[1000];
for(int i=0;i<horNum;i++)
{
qCopy[i]=0;
for(int j=0;j<verNum;j++)
if(x[j]==1)qCopy[i]=qCopy[i]+a[i][j];
z=z+qCopy[i]*c[i];
}
return z;
}
}
class Genetic {
public Genetic(){
}
public static void genAlgorith(A a,int c[],int q[],double pc,double pm,int loop ,int cap){
//pc=1-pc;
int k=0;//k用来控制循环的次数,一共进行150代遗传算法
int xynum=a.getXynum();
int [] xx=new int[xynum];
int [] xy=new int[xynum];
xy=a.getXy();
int aa[][];
int verNum;//表示列数
int horNum;//表示行数
aa=a.getA();
verNum=a.getVerNum();
horNum=a.getHorNum();
int [] x=new int[verNum];
double fitsum=0;
double []fit=new double[cap];
int unitnum[]=new int[cap];
long minflux;
int pointer;
double []p=new double[cap];
xCopy=new int[verNum];
int wholeCopy[]=new int[verNum];
double fitCopy;
int[][] whole=new int[cap][verNum];
boolean t=true;
while(t){
for(int j=0;j<xynum;j++){
xx[j]=(int)(Math.random()*xy[j]);
}
x=Matrix.convert(xx,xy,xynum);
if(Matrix.judge( aa,horNum,verNum, x, q)==true)
{ xCopy=x;
minflux0=Matrix.getZ(aa, horNum, verNum, xCopy, c);
whole[0]=x;
t=false;
}
}
//初始化样本空间
for(int i=1;i<cap;i++){
t=true;
while(t){
for(int j=0;j<xynum;j++){
xx[j]=(int)(Math.random()*xy[j]);
}
x=Matrix.convert(xx,xy,xynum);
if(Matrix.judge( aa,horNum,verNum, x, q)==true)
{
whole[i]=x;
t=false;
}
}
}//初始化完成
//开始遗传算法
do{
long temp;
minflux=Matrix.getZ(aa, horNum, verNum, whole[0], c);
pointer=0;
for(int i=0;i<cap;i++){
temp=Matrix.getZ(aa, horNum, verNum, whole[i], c);
if(minflux>temp)
{minflux=temp;pointer=i;}
fit[i] =(double) 1/temp;
fitsum=fitsum+fit[i];
}
process=process+"第"+k+"代最小值为:"+minflux+"此时x为:";
for(int i=0;i<verNum;i++)
process=process+whole[pointer][i];
process=process+"\n";
if(minflux<minflux0)
{
minflux0=minflux;//maxfit0表示上一代最大值
xCopy=whole[pointer];//X表示上一代最大值对应的x
K=k;//k表示什么
}
for(int i=1,j=0;i<cap;i++)
if(fit[i]>fit[i-1]){
wholeCopy=whole[i];
fitCopy=fit[i];
for( j=i-1;(j>=0)&&fitCopy>fit[j];j--)
{whole[j+1]=whole[j];
fit[j+1]=fit[j];
}
whole[j+1]=wholeCopy;
fit[j+1]=fitCopy;
}
int[][] wholeTemp=new int[cap][verNum];
for(int i=0;i<cap;i++)
for(int j=0;j<verNum;j++)
wholeTemp[i][j]=whole[i][j];
for(int i=0;i<cap;i++){
double h=(double)cap*(double)(fit[i]/fitsum);
unitnum[i]=(int)Math.round((double)cap*(double)(fit[i]/fitsum));//进行四舍五入
}
int pointer1=0;//unitnum[i]>1
int pointer2=0;//unitnum[i]<1
int up=0;
while(pointer1<cap&&pointer2<cap){
up=pointer1;
while(up<cap&&unitnum[up]<=1){
up++;
}
pointer1=up;
up=pointer2;
while(up<cap&&unitnum[up]>=1){
up++;
}
pointer2=up;
if(pointer1<cap&&pointer2<cap){
whole[pointer2]=whole[pointer1];
fit[pointer2]=fit[pointer1];
unitnum[pointer1]=unitnum[pointer1]-1;
unitnum[pointer2]=1;}
}
//给样本根据适应值排序,从小到大
int m=0;//m表示空间域
int n=0;
int s1=0,s2=0,s=0;
int f;
while(m<cap*pc)//进行交叉操作
{
if(n==0)
{
s1=m;
n=1;
}
else
{
s2=m;
n=0;
//c=rand()%22;//c随机产生的一个值
f=(int)(Math.random()*xynum);
int whole1[]=new int[xynum];
int whole2[]=new int [xynum];
int wholeCopy1[]=new int[verNum];
int wholeCopy2[]=new int[verNum];
whole1=Matrix.contraConvert(whole[s1], xy,xynum);
whole2=Matrix.contraConvert(whole[s2], xy,xynum);
for(int i=f;i<xynum;i++)//从c 开始后的所有位进行交叉,两两交叉
{
s=whole1[i];
whole1[i]=whole2[i];
whole2[i]=s;
}
wholeCopy1=Matrix.convert(whole1, xy,xynum);
wholeCopy2=Matrix.convert(whole2, xy,xynum);
if((Matrix.judge( aa,horNum,verNum, wholeCopy1, q)==true)&&Matrix.judge( aa,horNum,verNum, wholeCopy2, q)==true)
{
whole[s1]=wholeCopy1;
whole[s2]=wholeCopy2;
}
}
m++;
}//while(m<50)//进行交叉操作
double pp=0.0;
for(int i=0;i<cap;i++)//进行变异,以很小的概率随机地改变一个串位的值
{
for(int j=0;j<xynum;j++)
{
pp=Math.random();
if(pp<=pm) {
int whole1[]=new int[xynum];
int wholeCopy1[]=new int[verNum];
whole1=Matrix.contraConvert(whole[i], xy,xynum);
whole1[j]=(int)Math.random()*xy[j];
wholeCopy1=Matrix.convert(whole1, xy,xynum);
if(Matrix.judge( aa,horNum,verNum, wholeCopy1, q)==true)
whole[i]=wholeCopy1;
}
}
}
for(int i=0;i<cap;i++){
temp=Matrix.getZ(aa, horNum, verNum, whole[i], c);
fit[i] =(double) 1/temp;
fitsum=fitsum+fit[i];
}
for(int i=1,j=0;i<cap;i++)
if(fit[i]>fit[i-1]){
wholeCopy=whole[i];
fitCopy=fit[i];
for( j=i-1;(j>=0)&&fitCopy>fit[j];j--)
{whole[j+1]=whole[j];
fit[j+1]=fit[j];
}
whole[j+1]=wholeCopy;
fit[j+1]=fitCopy;
}
int po1=0;
int po2=(int)Math.round((cap * 0.95));
if(po2==cap)
po2=cap-1;
while(po2<cap){
whole[po2]=wholeTemp[po1];
po2++;po1++;
}
k++;
}while(k<loop);
// System.out.print("第"+K+"代最小,最小值为:"+minfit0+"相应的x为:");
//for(int i=0;i<verNum;i++)
//System.out.print(xCopy[i]);
// System.out.println("");
int [] xxCopy=Matrix.contraConvert(xCopy,xy,xynum);
try {
BufferedReader in = new BufferedReader(new
FileReader("a.dat"));
String name,st="";
for(int i=0;i<xynum;i++)
{
for (int j = 0; j < xxCopy[i] + 2; j++)
st = in.readLine();
StringTokenizer e= new StringTokenizer(st, "|");
name = e.nextToken();
lines=lines+name;
while(e.hasMoreTokens()){
name = e.nextToken();
lines=lines+"->"+name;
}
lines=lines+"\n";
st=in.readLine();
while(st.equals("")==false)st=in.readLine();
}
in.close();
} catch (IOException exception){ }
}
private static int K=0;
private static long minflux0=0;
private static int[] xCopy;
private static String process="";
private static String lines="";
public static int getK(){
return K;
}
public static long getMinflux(){
return minflux0;
}
public static int[] getXCopy(){
return xCopy;
}
public static String getProcess(){
String m=process;
process="";
return m;
}
public static String getLines(){
String m=lines;
lines="";
return m;
}
}
class MinFit {
public static long GetMinFit(A a,int[] c){
int aa[][];
int verNum=a.getVerNum();//表示列数
int horNum=a.getHorNum();//表示行数
int [] xy=a.getXy();
int xynum=a.getXynum();
int [] xx=new int[xynum];
int [] x=new int[verNum];
aa=a.getA();
long minFit=10000;
int max=1;
for( int i=0;i<xynum;i++)
max=max*xy[i];
//判断所xy[i]不为0
for(long i=0;i<max;i++){
//转化为xx[]
long value=i;
for(int j=0;j<xynum;j++){
xx[j]=(int)value%xy[j];
value=value/xy[j];
}
x=Matrix.convert(xx,xy,xynum);
if(minFit>Matrix.getZ(aa,horNum,verNum,x,c)){
minFit=Matrix.getZ(aa,horNum,verNum,x,c);
}
}
return minFit;
}
}
class Frame1_jButton2_actionAdapter implements java.awt.event.ActionListener {
Frame1 adaptee;
Frame1_jButton2_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
class Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {
Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class Frame1_jButton3_actionAdapter implements java.awt.event.ActionListener {
Frame1 adaptee;
Frame1_jButton3_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton3_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -