Ajouter un commentaire

Niroken
Re: projet en programmation java

Hello,

On peut modéliser ton problème de la facon suivante :

On considère qu une culture contient des cellules.
Ces cellules peuvent être soit normales soit malignes.

Une cellule entre en division tous les X temps.
Pour matérialiser l'inhibition, on dira que sur une population de cellules on ne divisera qu un pourcentage de cette population, ce pourcentage sera à 100 pour les cellules malignes.
Ce paramétrage n'est pas très réaliste mais c'est une idée de départ.

On considère un agent mutagèe qui toutes les demi heures peut faire entrer des cellules en mutation parmi la population de cellules normales.

J'ai implémenté tout ceci de la facon suivante :

Cellule

package bean;

public abstract class Cellule {
	
	protected int mTempEcouleDepuisLastDivision;
	
	public abstract Cellule diviseCellule();

}

CelluleNormale

package bean;

public class CelluleNormale extends Cellule {

	private static int sTempEntreDivisions = 7200;
	public static int sPourcentageDivision = 10;
	
	public Cellule diviseCellule() {
		if (mTempEcouleDepuisLastDivision > sTempEntreDivisions) {
			mTempEcouleDepuisLastDivision = 0;
			if (Math.random() * 100 <= sPourcentageDivision) {
				return new CelluleNormale();
			}
		} else {
			mTempEcouleDepuisLastDivision++;
		}		
		
		return null;
	}

}

CelluleMaligne

package bean;

public class CelluleMaligne extends Cellule {

	private static int sTempEntreDivisions = 3600;
	public static int sPourcentageDivision = 100;
	
	public Cellule diviseCellule() {
		if (mTempEcouleDepuisLastDivision > sTempEntreDivisions) {
			mTempEcouleDepuisLastDivision = 0;
			if (Math.random() * 100 <= sPourcentageDivision) {
				return new CelluleMaligne();
			}
		} else {
			mTempEcouleDepuisLastDivision++;
		}
				
		return null;
	}

}

AgentMutagene

package bean;

public class AgentMutagene {
	
	private int mTempEcouleDepuisLastAction;
	
	private	static int sTempEntreActions = 1800;
	private static double sPourcentageMutationMaligne = 0.1;
	
	public Cellule muteCellule(Cellule pCellule) {
		if (pCellule instanceof CelluleNormale) {
			if (Math.random() * 100 <= sPourcentageMutationMaligne) {
				return new CelluleMaligne();
			}
		}
		
		return pCellule;
	}
	
	public boolean fireAction() {
		if (mTempEcouleDepuisLastAction > sTempEntreActions) {
			mTempEcouleDepuisLastAction = 0;
			return true;
		} else {
			mTempEcouleDepuisLastAction++;
			return false;
		}
	}
	
}

Culture

package job;

import java.util.ArrayList;
import java.util.List;

import bean.AgentMutagene;
import bean.Cellule;
import bean.CelluleMaligne;
import bean.CelluleNormale;

public class Culture {
	
	private int mTempEcoule;
	private AgentMutagene mAgentMutagene;
	private List<Cellule> mCellules;
	
	public Culture(int pNombreCellules) {
		mAgentMutagene = new AgentMutagene();
		mCellules = new ArrayList<Cellule>();
		
		for (int i = 0; i < pNombreCellules; i++) {
			mCellules.add(new CelluleNormale());
		}
	}
	
	private void diviseCellules() {
		for (int i = 0; i < mCellules.size(); i++) {
			Cellule vCelluleTmp = mCellules.get(i).diviseCellule();
			
			if (vCelluleTmp != null) {
				mCellules.add(vCelluleTmp);
			}			
		}
	}
	
	private void fireAgentMutageneAction() {
		if (mAgentMutagene.fireAction()) {
			for (int i = 0; i < mCellules.size(); i++) {
				mCellules.set(i, mAgentMutagene.muteCellule(mCellules.get(i)));
			}
		}
	}
	
	private int getCountCellulesNormales() {
		int vResult = 0;
		
		for (int i = 0; i < mCellules.size(); i++) {
			if (mCellules.get(i) instanceof CelluleNormale) {
				vResult++;
			}
		}
		
		return vResult;
	}
	
	private int getCountCellulesMalignes() {
		int vResult = 0;
		
		for (int i = 0; i < mCellules.size(); i++) {
			if (mCellules.get(i) instanceof CelluleMaligne) {
				vResult++;
			}
		}
		
		return vResult;
	}
	
	private void displayCellulesStatus() {
		System.out.println(
				"Seconde : " + mTempEcoule +
				" Population de Cellules : " + mCellules.size() + 
				" Cellules Normales : " + getCountCellulesNormales() + 
				" Cellules Malignes : " + getCountCellulesMalignes());
	}
	
	public void simuleCultureLife() {
		for (int i = 0; i < 100000; i++) {
			fireAgentMutageneAction();
			diviseCellules();
			displayCellulesStatus();
			mTempEcoule++;
		}
	}
	
}

Program

import job.Culture;


public class Program {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Culture(100).simuleCultureLife();
	}

}

Il y a moyen d'améliorer, mais c'est un départ.

Bonne chance,
Niroken

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  QQQ    FFFF  EEEE   QQQ     CCC 
Q Q F E Q Q C
Q Q FFF EEE Q Q C
Q QQ F E Q QQ C
QQQQ F EEEE QQQQ CCC
Q Q