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
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
CelluleNormale
CelluleMaligne
AgentMutagene
Culture
Program
Il y a moyen d'améliorer, mais c'est un départ.
Bonne chance,
Niroken