$ 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; i0; 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 件のコメント:
コメントを投稿