Advertisement
Guest User

code fini colfauc

a guest
Apr 21st, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.53 KB | None | 0 0
  1. # NB :
  2. # 0 : colombe
  3. # 1 : faucon
  4. # 2: perroquet
  5. # 3 : grue
  6. # 4 : corbeau
  7.  
  8. #A FINIR : PB DE DIVISION PAR ZERO + grafik
  9.  
  10. from random import *
  11. import numpy as np
  12. from pylab import *
  13.  
  14. def pioche_xadv2(tab,xadv1): #on prend bien l'indice de l'adv1 pour verifier qu'il soit different de l'indice de l'adv2
  15. r=randrange(0,len(tab))
  16. while (r==xadv1):
  17. r=randrange(0,len(tab)+1)
  18. return r
  19.  
  20. def premier_sang(adv1,adv2): # Simulation du premier combat
  21. signal=0
  22. gain1=0
  23. gain2=0
  24. comp1=0
  25. comp2=0
  26. if (adv2<adv1):#pour réduire le nombre d'itération
  27. adv2,adv1=adv1,adv2
  28. signal=1
  29.  
  30.  
  31. if adv1==0: #COLOMBE
  32. if adv2==0 or adv2==2 or adv2==4: # vs COLOMBE ou PERROQUET ou CORBEAU
  33. gain1=R/2
  34. gain2=R/2
  35. comp1=0
  36. comp2=0
  37.  
  38. elif adv2==1: # vs FAUCON
  39. gain1=0
  40. gain2=R
  41. comp1=0
  42. comp2=1
  43.  
  44. elif adv2==3: # vs GRUE
  45. z=randrange(0,2) #choix si la grue va être gentille ou méchante
  46. if z==0: #si gentille
  47. gain1=R/2
  48. gain2=R/2
  49. comp1=0
  50. comp2=0
  51. elif z==1: #si méchante
  52. gain1=0
  53. gain2=R
  54. comp1=0
  55. comp2=1
  56.  
  57.  
  58. elif adv1==1: #FAUCON
  59. if adv2==2 or adv2==4 : # vs PERROQUET ou CORBEAU
  60. gain1=R
  61. gain2=0
  62. comp1=1
  63. comp2=0
  64.  
  65. elif adv2==1: # vs FAUCON
  66. x=randrange(0,101)
  67. y=randrange(0,101)
  68. if x>y:
  69. gain1=R-C
  70. gain2=-C
  71. else :
  72. gain1=-C
  73. gain2=R-C
  74. comp1=1
  75. comp2=1
  76.  
  77. elif adv2==3: # vs GRUE
  78. z=randrange(0,2) #choix si la grue va être gentille ou méchante
  79. if z==0: #si gentille
  80. gain1=R
  81. gain2=0
  82. comp1=1
  83. comp2=0
  84. elif z==1: #si méchante
  85. x=randrange(0,101)
  86. y=randrange(0,101)
  87. if x>y:
  88. gain1=R-C
  89. gain2=-C
  90. else :
  91. gain1=-C
  92. gain2=R-C
  93. comp1=1
  94. comp2=1
  95.  
  96.  
  97. elif adv1==3: #GRUE
  98. if adv2==3: # vs GRUE
  99. z=randrange(0,2) #on décide de si la grue1 va être gentille ou méchante au tour actuel
  100. v=randrange(0,2) #on décide de si la grue2 va être gentille ou méchante au tour actuel
  101. if z==0 and v==0 : #elles sont gentilles alors partage
  102. gain1=R/2
  103. gain2=R/2
  104. comp1=0
  105. comp2=0
  106. elif z==0 and v==1 : #la grue2 est méchante et la grue1 est gentille
  107. gain1=0
  108. gain2=R
  109. comp1=0
  110. comp2=1
  111. elif z==1 and v==0 :#la grue1 est méchante et la grue deux est gentille
  112. gain1=R
  113. gain2=0
  114. comp1=1
  115. comp2=0
  116. elif z==1 and v==1 :#elles vont être toutes les deux méchantes alors combat
  117. x=randrange(0,101)
  118. y=randrange(0,101)
  119. if x>y:
  120. gain1=R-C
  121. gain2=-C
  122. else :
  123. gain1=-C
  124. gain2=R-C
  125. comp1=1
  126. comp2=1
  127.  
  128. elif adv2==4: # vs CORBEAU
  129. z=randrange(0,2) #choix si la grue va être gentille ou méchante
  130. if z==0: # la grue est gentille
  131. gain1=R/2
  132. gain2=R/2
  133. comp1=0
  134. comp2=0
  135. elif z==1: # la grue est méchante
  136. gain1=R
  137. gain2=0
  138. comp1=1
  139. comp2=0
  140.  
  141.  
  142. elif adv1==4: #CORBEAU
  143. if adv2==4: # vs CORBEAU
  144. gain1=R/2
  145. gain2=R/2
  146. comp1=0
  147. comp2=0
  148.  
  149.  
  150. if signal==1: #si il y a eu changement alors remise en ordre
  151. gain1,gain2,comp1,comp2=gain2,gain1,comp2,comp1
  152. return (gain1,comp1,gain2,comp2)
  153.  
  154. def bilan_gen(tab,Tcol,Tfau,Tper,Tgrue,Tcor,seuil,prop,ind):
  155. som=0
  156. Tcol.append(0)
  157. Tfau.append(0)
  158. Tper.append(0)
  159. Tgrue.append(0)
  160. Tcor.append(0)
  161. for i in tab:
  162. if ((i[0]==0)and(i[1]>=seuil)): #colombe
  163. Tcol[-1]+=i[1]
  164. som+=i[1]
  165. elif ((i[0]==1)and(i[1]>=seuil)): #faucon
  166. Tfau[-1]+=i[1]
  167. som+=i[1]
  168. elif ((i[0]==2)and(i[1]>=seuil)): #perroquet
  169. Tper[-1]+=i[1]
  170. som+=i[1]
  171. elif ((i[0]==3)and(i[1]>=seuil)): #grue
  172. Tgrue[-1]+=i[1]
  173. som+=i[1]
  174. elif ((i[0]==4)and(i[1]>=seuil)): #corbeau
  175. Tcor[-1]+=i[1]
  176. som+=i[1]
  177. if (som==0):
  178. som+=1
  179. #maintenant on remplit le tableau des proportions pour la generation suivante
  180. prop[0]=int((Tcol[-1]/som)*ind)
  181. prop[1]=int((Tfau[-1]/som)*ind)
  182. prop[2]=int((Tper[-1]/som)*ind)
  183. prop[3]=int((Tgrue[-1]/som)*ind)
  184. prop[4]=int((Tcor[-1]/som)*ind)
  185.  
  186. return (Tcol,Tfau,Tper,Tgrue,Tcor,prop)
  187.  
  188. def crea_gen(prop,tab):
  189. tab=[]
  190. for espece in range(5):
  191. for nombre in range(int(prop[espece])):
  192. tab.append([espece,0])
  193. return tab
  194.  
  195. def simuCombat2(adv1,comp1,adv2,comp2):
  196. # R : valeur de la ressource convoitée
  197. # C : coût d'un combat
  198. # adv1, adv2: nombres binaires, 0 pour colombe, 1 pour faucon, 2 pour perroquet, 3 pour grue et 4 pour corbeau
  199. #comp1 et comp2 : comportement au combat precedent de adv1 et adv2
  200. signal=0
  201. gain1=0
  202. gain2=0
  203. comp1=0
  204. comp2=0
  205. if (adv2<adv1): #pour réduire le nombre d'itération
  206. adv2,adv1=adv1,adv2
  207. signal=1
  208.  
  209.  
  210. if (adv1==0):
  211. if adv2==0: #COLOMBE vs COLOMBE
  212. gain1=R/2
  213. gain2=R/2
  214.  
  215. elif adv2==1:#COLOMBE vs FAUCON
  216. gain1=0
  217. gain2=R
  218.  
  219. elif adv2==2: #COLOMBE vs PERROQUET
  220. gain1=R/2
  221. gain2=R/2
  222.  
  223. elif adv2==3:#COLOMBE vs GRUE
  224. x=randrange(0,2)
  225. if x==0 :
  226. gain1=R/2
  227. gain2=R/2
  228. elif x==1 :
  229. gain1=0
  230. gain2=R
  231.  
  232. elif adv2==4 : #COLOMBE vs CORBEAU
  233. gain1=0
  234. gain2=R
  235.  
  236.  
  237.  
  238.  
  239. elif (adv1==1):
  240. if adv2==1 or adv2==2 : #FAUCON vs FAUCON/FAUCON vs PERROQUET
  241. x=randrange(0,2)
  242. if x==0:
  243. gain1=R-C
  244. gain2=-C
  245. else :
  246. gain1=-C
  247. gain2=R-C
  248.  
  249. elif adv2==3: #FAUCON vs GRUE
  250. z=randrange(0,2) #choix si la grue va être méchante ou gentile au tour actuel
  251. if z==0 : #grue gentille
  252. gain1=R
  253. gain2=0
  254. elif z==1 : #grue méchante donc combat
  255. x=randrange(0,2)
  256. if x==0: #Aléatoire (P=1/2)
  257. gain1=R-C
  258. gain2=-C
  259. else :
  260. gain1=-C
  261. gain2=R-C
  262.  
  263. elif adv2==4: #FAUCON vs CORBEAU
  264. gain1=R
  265. gain2=0
  266.  
  267.  
  268.  
  269.  
  270. elif adv1==2:
  271. if adv2==2: #PERROQUET vs PERROQUET
  272. gain1=R/2
  273. gain2=R/2
  274.  
  275. if adv2==3: #PERROQUET vs GRUE
  276. if comp2==0 : #si au tour d'avant la grue a été gentille alors le perroquet le sera au tour actuel
  277. z=randrange(0,2) #on décide de si la grue va être gentille ou méchante au tour actuel
  278. if z==1 : #la grue va être méchante
  279. gain1=0
  280. gain2=R
  281. comp2=1
  282. elif z==0 : #sinon elle est gentille
  283. gain1=R/2
  284. gain2=R/2
  285. elif comp2==1 : #la grue a été méchante au tour d'avant donc le perroquet va l'être au tour actuel
  286. z=randrange(0,2) #on décide de si la grue va être gentille ou méchante au tour actuel
  287. if z==1 : #la grue va être méchante donc il y a combat
  288. x=randrange(0,101)
  289. y=randrange(0,101)
  290. if x>y:
  291. gain1=R-C
  292. gain2=-C
  293. else :
  294. gain1=-C
  295. gain2=R-C
  296. elif z==0: #la grue va être gentille donc elle perd contre le perroquet
  297. gain1=R
  298. gain2=0
  299. comp2=0
  300.  
  301. if adv2==4: #PERROQUET vs CORBEAU
  302. if comp1==0 and comp2==0 : #si les deux ont été gentil au tour d'avant, le perroquet va être gentil au tour actuel et le corbeau va être méchant
  303. gain1=0
  304. gain2=R
  305. comp2=1
  306. elif comp1==0 and comp2==1 : #si le perroquet a été gentil au tour d'avant et le corbeau méchant alors il y a combat
  307. x=randrange(0,101)
  308. y=randrange(0,101)
  309. if x>y:
  310. gain1=R-C
  311. gain2=-C
  312. else :
  313. gain1=-C
  314. gain2=R-C
  315. comp1=1
  316. elif comp1==1 and comp2==0 : #si le perroquet a été méchant au tour d'avant et le corbeau gentil alors il y a partage
  317. gain1=R/2
  318. gain2=R/2
  319. comp1=0
  320. elif comp1==1 and comp2==1 : #si les deux étaient méchants au tour d'avant alors le perroquet va être le seul méchant au tour actuel
  321. gain1=R
  322. gain2=0
  323. comp2=0
  324.  
  325.  
  326.  
  327. elif adv1==3:
  328. if adv2==3: #GRUE vs GRUE
  329. z=randrange(0,2) #on décide de si la grue1 va être gentille ou méchante au tour actuel
  330. v=randrange(0,2) #on décide de si la grue2 va être gentille ou méchante au tour actuel
  331. if z==0 and v==0 : #elles sont gentilles alors partage
  332. gain1=R/2
  333. gain2=R/2
  334. elif z==0 and v==1 : #la grue2 est méchante et la grue1 est gentille
  335. gain1=0
  336. gain2=R
  337. elif z==1 and v==0 :#la grue1 est méchante et la grue deux est gentille
  338. gain1=R
  339. gain2=0
  340. elif z==1 and v==1 :#elles vont être toutes les deux méchantes alors combat
  341. x=randrange(0,101)
  342. y=randrange(0,101)
  343. if x>y:
  344. gain1=R-C
  345. gain2=-C
  346. else :
  347. gain1=-C
  348. gain2=R-C
  349.  
  350. elif adv2==4: #GRUE vs CORBEAU
  351. z=randrange(0,2) #on décide si la grue va être gentille ou méchante au tour actuel
  352. if comp1==0 : #si la grue a été gentille au tour d'avant alors le corbeau sera méchant
  353. if z==0:#si la grue va être gentille
  354. gain1=0
  355. gain2=R
  356. elif z==1: #si la grue va être méchante alors combat
  357. x=randrange(0,101)
  358. y=randrange(0,101)
  359.  
  360. if x>y:
  361. gain1=R-C
  362. gain2=-C
  363. else :
  364. gain1=-C
  365. gain2=R-C
  366. comp1=1
  367. elif comp1==1 : #si la grue a été méchante au tour d'avant alors le corbeau va être gentil
  368. if z==0: #la grue va être gentille alors partage
  369. gain1=R/2
  370. gain2=R/2
  371. comp1=0
  372. elif z==1 : #la grue est méchante
  373. gain1=R
  374. gain2=0
  375.  
  376.  
  377.  
  378.  
  379. elif adv1==4:
  380. if adv2==4:#CORBEAU vs CORBEAU
  381. if comp1==0 and comp2==0: #si ils étaient tous les deux gentils au tour d'avant alors combat
  382. x=randrange(0,101)
  383. y=randrange(0,101)
  384. if x>y:
  385. gain1=R-C
  386. gain2=-C
  387. else :
  388. gain1=-C
  389. gain2=R-C
  390. comp1=1
  391. comp2=1
  392. #il n'y aura pas la possibilité de trouver un corbeau gentil contre un corbeau méchant
  393. elif comp1==1 and comp2==1 : #si ils étaient tous les deux méchants au tour d'avant alors partage
  394. gain1=R/2
  395. gain2=R/2
  396. comp1=0
  397. comp2=0
  398.  
  399. if signal==1: #si il y a eu changement alors remise en ordre
  400. gain1,gain2,comp1,comp2=gain2,gain1,comp2,comp1
  401. return (gain1,comp1,gain2,comp2)
  402.  
  403. if __name__ == '__main__':
  404. R=10
  405. C=50
  406. tab=[]
  407. nbgen=20
  408. seuil=3
  409. rounds=30
  410. ind=500
  411. prop=[0.5*ind,0.5*ind,0*ind,0*ind,0*ind] #Tcol,Tfau,Tper,Tgrue,Tcor
  412. Tcol=[]
  413. Tfau=[]
  414. Tcor=[]
  415. Tgrue=[]
  416. Tper=[]
  417. prop_finale=[]
  418. propcol=[]
  419. propfau=[]
  420. propgrue=[]
  421. propper=[]
  422. propcor=[]
  423. for nbgen in range(nbgen):
  424. tab=crea_gen(prop,tab)
  425. for xadv1 in range (len(tab)):
  426. xadv2=pioche_xadv2(tab,xadv1)
  427. adv1=tab[xadv1][0]
  428. adv2=tab[xadv2][0]
  429. resultat_combat=premier_sang(adv1,adv2)
  430. tab[xadv1][1]=resultat_combat[0]
  431. tab[xadv2][1]=resultat_combat[2]
  432. for round in range (rounds):
  433. resultat_combat=simuCombat2(adv1,resultat_combat[1],adv2,resultat_combat[3])
  434. tab[xadv1][1]=resultat_combat[0]
  435. tab[xadv2][1]=resultat_combat[2]
  436. bilan=bilan_gen(tab,Tcol,Tfau,Tper,Tgrue,Tcor,seuil,prop,ind)
  437. propcol.append(bilan[5][0])
  438. propfau.append(bilan[5][1])
  439. propgrue.append(bilan[5][3])
  440. propcor.append(bilan[5][4])
  441. propper.append(bilan[5][2])
  442. X=linspace(1,len(propcol),len(propcol))
  443. figure(figsize=(10,5))
  444. plot(X,propcol,label="Colombes")
  445. plot(X,propfau,label="Faucons")
  446. plot(X,propgrue,label="Grues")
  447. plot(X,propcor,label="Corbeaux")
  448. plot(X,propper,label="Perroquets")
  449. legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
  450. show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement