2007年12月20日木曜日

javaで実行させながらパラメータ調整

コマンドプロンプトで
$ javac aiProcessMass_e.java
でクラスファイル生成
$appletviewer aiProcessMass_e.java
で実行

実行イメージ↓



/*
* created 2007/11/24
*/
//last modified 2007/12/18


import java.awt.*;
import java.awt.event.*;
import java.applet.*;

/*
//コピペするならかっこを半角にすること
<applet code="aiProcess_e.class" height="700" width="1200">
</applet>

*/

public class aiProcess_e extends Applet implements ActionListener, Runnable {

Thread thread = null;

///*for event*/
Button bt_reset, bt_startStop;
int resetSW = 0; //1-reset
int startSW = 1; //0-stop, 1-start

int num=1000000; // メイン関数の中の関数群実行回数上限

static int max_trna = 210; // trna1,trna2に関する配列の最大要素数
int num_trna_division = 200; // trna数がこれ以上になると分裂する
int num_trna_percell = 100; // 分裂時の1細胞あたりのtrnaの数
double mutate_rate = 0.1; // trna集団のうちいくつ変異させるか:0~1で指定

///*initialization parameters*/
double init_trna1r = 20.0;//tRNA1の認識範囲
double init_trna1p = 100.0;//tRNA1の重心
double init_trna2r = 20.0;//tRNA2の認識範囲
double init_trna2p = 150.0;//tRNA2の重心
int init_num_trna1 = 50;//tRNA1の初期個数
int init_num_trna2 = 50;//tRNA2の初期個数

///*mutation system*/
double length = 100.0; // trnaの長さ
double ai = 100.0 ; // 1以上の正の整数を指定すること
double max = 30.0; // 認識範囲の変化量の絶対値の上限

///*deletion systems*/
double r_max = 80.0; //trnaの認識範囲の上限(この値以上になるとそのtrnaは消される)
double r_min = 1.0; //trnaの認識範囲の下限(この値以下になるとそのtrnaは消される)

///*animo acid availability*/
//1回の翻訳当たりのアミノ酸の合成個数
double aa1 = 1.0;
double aa2 = 1.5;

///*codon level coordinates' paramters*/
double basepoint = 100.0;
double codon1_level = 100.0;
double gap = 50.0;
double codon2_level = 150.0;

/////*trna system variables*/
//r:trna range of recognition, p:center of range
double trna1r[] = new double[max_trna];
double trna1p[] = new double[max_trna];
double trna2r[] = new double[max_trna];
double trna2p[] = new double[max_trna];
int num_trna1, num_trna2; //それぞれtRNA1,tRNA2の数

///*temporal variables*/
int mem_crossindex[] = new int[max_trna];

///*分裂回数*/
int num_division;

public void init(){
thread = new Thread(this);
thread.start();

///*locate buttons*/
bt_reset = new Button("RESET");
bt_reset.addActionListener(this);

bt_startStop = new Button("START / STOP");
bt_startStop.addActionListener(this);


// setInitialCondition();


///*set layout*/
setLayout(new BorderLayout());
Panel pnl = new Panel();
pnl.setLayout(new GridLayout(20,10,3,3));
pnl.add(bt_reset);
pnl.add(bt_startStop);
pnl.add(new Label(" ")); //vacant space?
add(pnl, "East");

}

public void actionPerformed(ActionEvent ev){
if( ev.getSource() == bt_reset){
resetSW = 1;
}else if (ev.getSource() == bt_startStop){
if(startSW == 0){
startSW = 1;
}else{
startSW = 0;
}
}
}


public void paint(Graphics g){

//getSize().widthの幅の右から70pixは、文字情報表示
///*set colors*/
Color lightyellow = new Color(255,255,180);
Color lightblue = new Color(180,255,255);
Color blue = new Color(0,0,255);
Color pink = new Color(255,180,255);
Color red = new Color(255,0,0);
Color green = new Color(0,255,0);
Color black = new Color(0,0,0);

//描画順にどんどん上塗りされていくことに注意する。


///*最初にコドン領域を描画したらいい?*/
g.setColor(blue);
// g.fillRect(100+1, (int)basepoint+400, getSize().width - 400, 1);//コドン認識領域を描く
g.drawLine(100+1, (int)basepoint+400, getSize().width - 400, (int)basepoint+400);
g.setColor(red);
// g.fillRect(100+1, (int)(basepoint + gap+400), getSize().width - 400, 1);//コドン認識領域を描く
g.drawLine(100+1, (int)(basepoint+gap+400), getSize().width - 400, (int)(basepoint+gap+400) );

//tRNAの認識範囲の軸が重なると個が見にくいので描画領域の上下でtRNAごとに作成
g.setColor(blue);
// g.fillRect(100+1, (int)basepoint, getSize().width - 400, 1);//コドン認識領域を描く
g.drawLine(100+1, (int)basepoint, getSize().width - 400, (int)basepoint);
g.setColor(red);
// g.fillRect(100+1, (int)(basepoint + gap), getSize().width - 400, 1);//コドン認識領域を描く
g.drawLine(100+1, (int)(basepoint+gap), getSize().width - 400, (int)(basepoint+gap) );


g.setColor(black);
g.drawLine(100, 0, 100, getSize().height );//軸を描く

int i;

g.setColor(red);
for(i=0; i< num_trna1="%5d," num_trna2="%5d\n" num_trna1="%5d," num_trna2="%5d\n" num_division="0;" num_trna1 =" init_num_trna1;" num_trna2 =" init_num_trna2;" i="0;" max="" x="" length="" 0="" 1="" double="" rndd="Math.random()" trnar="" dr="0.0;" return="" public="" void="" int="" num_all="num_trna1" num_mutate="(int)(" mutate_rate="" i="0;"><>= num_trna1 ){
rnd = rnd - num_trna1;
System.out.println("mutation @trna2");
trna2r[rnd] = mutate( trna2r[rnd] );
System.out.println("\n");
// }else{
// printf("\nIn Function mutations(). Error occured.\n");
}
}

}


/////*tRNAの認識範囲が許容範囲外のものを消去する関数*******************************/
public void delete(){
int i,j;

//異常に長いor短い認識範囲のtRNAは消去
for( i=0; i= r_min && trna1r[i] <= r_max ){ continue; }else{ //shiftseq( trna1r, num_trna1, i); for( j=i; j= r_min && trna2r[i] <= r_max ){ continue; }else{ // shiftseq( trna2r, num_trna2, i); for( j=i; j< j="0," num_cross_l1_trna1="0," num_cross_l1_trna2="0;" num_cross_l2_trna1="0," num_cross_l2_trna2="0;" num_all =" num_trna1" num_rep =" num_trna_division" num_level1 =" (int)" num_level2 =" num_level1;" j="0;" i="0;"><= codon1_level && trna1p[i]+trna1r[i] >= codon1_level){
num_cross_l1_trna1++;
mem_crossindex[j]=i;
j++;
}
}
// num_cross_l1_trna1 = num_cross(CODON1_LEVEL, trna1r, trna1p, num_trna1);
for (i=0; i<= codon1_level && trna2p[i]+trna2r[i] >= codon1_level){
num_cross_l1_trna2++;
mem_crossindex[j]=i;
j++;
}
}
//num_cross_l1_trna2 = num_cross(CODON1_LEVEL, trna2r, trna2p, num_trna2);

num_rep1 = (double) num_cross_l1_trna1 * aa1;
num_rep2 = (double) num_cross_l1_trna2 * aa2;

trna1_l1_rep = (int) ( num_rep1/(num_rep1+num_rep2) * num_level1 );
trna2_l1_rep = (int) ( num_rep2/(num_rep1+num_rep2) * num_level1 );


temp_num_trna1 = num_trna1;
for(i=0; i<= codon2_level && trna1p[i]+trna1r[i] >= codon2_level){
num_cross_l2_trna1++;
mem_crossindex[j]=i;
j++;
}
}
//num_cross_l2_trna1 = num_cross(CODON2_LEVEL, trna1r, trna1p, temp_num_trna1);
for (i=0; i<= codon2_level && trna2p[i]+trna2r[i] >= codon2_level){
num_cross_l2_trna2++;
mem_crossindex[j]=i;
j++;
}
}
//num_cross_l2_trna2 = num_cross(CODON2_LEVEL, trna2r, trna2p, temp_num_trna2);

num_rep1 = (double) num_cross_l2_trna1 * aa1;
num_rep2 = (double) num_cross_l2_trna2 * aa2;

trna1_l2_rep = (int) ( num_rep1/(num_rep1+num_rep2) * num_level2 );
trna2_l2_rep = (int) ( num_rep2/(num_rep1+num_rep2) * num_level2 );

//temp_num_trna1 = num_trna1;
for(i=0; i 0; residue--){
rnd = (int) ( Math.random()*( temp_num_trna1 + temp_num_trna2 ) );
if( rnd < num_all =" num_trna1" temp_num_trna1 =" num_trna1;" temp_num_trna2 =" num_trna2;" num_trna1 =" 0;" num_trna2 =" 0;" i="0;" rnd="(int)">< i="0;" i="0;">

0 件のコメント: