Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#801 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 04-08-2016 08:26:01
Bonjour yoshi,
léon a déjà pointé en effet que cette méthode ne respectait pas l'énoncé.
L'énoncé dit que le triplet est choisi au hasard (comprendre donc de façon équiprobable) parmi les triplets ordonnés, strictement positifs dont la somme est 2016. C'est donc la loi $\mathbb{P}(X,Y,Z)$ pour $(X,Y,Z)$ dans l'ensemble décrit, qui est uniforme. On ne sait à priori pas quelle est la loi $\mathbb{P}(X)$ et $\mathbb{P}(Y | X=x)$ (du fait de la somme fixe, la loi $\mathbb{P}(Z | X=x,Y=y)$ est concentrée sur le point $2016-x-y$).
Ici, ton code suppose que $\mathbb{P}(X)$ est uniforme sur $\{1,\cdots, 672\}$ et que $\mathbb{P}(Y | X=x)$ est uniforme sur $\{x,\cdots, \lfloor \frac{2016-x}{2}\rfloor\}$.
Il est possible que la première supposition soit vraie mais pas la seconde (cf arguments de léon).
sans connaissance sur ces lois, les deux options que je vois sont :
construire la liste de tous les triplets et en tirer un au hasard (approche retenue par ton code et le mien)
tirer un nombre au hasard entre $1$ et $338688$ et fabriquer de manière bijective un triplet. Cette approche à l'avantage de ne pas nécessiter le stockage intermédiaire de la liste des triplets. Ce qui peut être déterminant si cette liste était de taille trop grande pour les capacités de l'ordinateur (ce qui n'est bien sûr pas le cas ici). J'ai donné la bijection qui est en fait l'inverse de mon alogorithme de génération des triplets
#802 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 03-08-2016 13:52:04
Tes propos sont inadmissibles.
Du fait de ton ignorance du sujet, tu diffames le travail des autres !
Si tu avais dis "je ne vois pas d'où sortent les triplets", c'est complètement acceptable. Au lieu de ça, tu dis "cette liste a été copiée d'on ne sait où", c'est un propos insidieux qui sous entend la malhonnêteté intellectuelle de ma part. J'aurais copié une liste d'un endroit confidentiel et l'aurait présenté comme un résultat personnel.
Il ne vient pas à l'esprit directement que ce code est antérieur qu code donné au message #43.
Encore une fois, c'est ta propre ignorance de ce sujet que tu étales.
J'ai présenté le premier code comme une "démonstration informatique" : j'exhibe une liste de triplets et je montre qu'elle a une espérance > 75. A ce stade, je réponds à 100% à l'exercice. Mais je sais que c'est frustrant pour les participants de ne pas savoir d'où viennent ces triplets.
Je poste donc dans la foulée l'explication théorique. A ce stade, tout un chacun peut mettre en œuvre la méthode et trouver exactement les mêmes triplets, ou éventuellement critiquer mon approche, voire la réfuter.
Le dernier post était accessoire, je le postais pour éviter à certains d'avoir à coder directement depuis mon papier. Là réside toute la différence entre nous, j'estime cet élément accessoire là où pour toi c'est essentiel !
Je me demande d'ailleurs ce que tu espères trouver dans la solution "officielle" que publierait éventuellement freddy.
#803 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 03-08-2016 10:54:26
Puis Yassine a produit une liste de triplets sans préciser la méthode de fabrication.
Naturellement pour tout lecteur, cette liste a été copiée d'on ne sait où.
Je trouve ces propos insupportables.
Ce n'est pas parce que tu n'es pas capable de comprendre une démonstration que tu peux simplement nier son existence. J'ai posté la rédaction formelle de mon approche (que tu as avoué ne pas comprendre) et le code Python qui la met en oeuvre et produit les 100 triplets.
De plus, comme dirait yoshi, ton pluriel parait bien singulier ! il ne me semble pas avoir lu de commentaires diffamatoires autres que les tiens.
Ce fil était intéressant, tu as réussi à le pourrir
#804 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 02-08-2016 21:22:52
Donc, pour l'instant, mis à part lister brutalement les 338688 triplets pour en choisir suivant la loi uniforme, je ne vois pas comment programmer cela de manière élégante...
La question est intéressante !
En gros, il s'agit de trouver la bijection inverse de la bijetion "naturelle" associée à mon algorithme de génération des triplets.
Si je note $N$ le nombre total de triplets, on veut troouver $\sigma: \{1 \cdots N\} \to \{ (x_1, x_2, x_3) \ | \ 0 < x_1 \le x_2 \le x_3 \wedge x_1+x_2+x_3=2016\}$. Ensuite, il suffit de tirer au hasard un entier entre $1$ et $N$ et d'utiliser cette bijection.
Je pense avoir une idée pour la fonction :
soit $n \le N$, il faut chercher $\displaystyle \max_x \sum_{i=1}^{x} \big(\left\lfloor \frac{2016-i}{2} \right\rfloor - i + 1\big) < n $ ($x$ valant zéro lorsqu'aucune valeur ne convient). Intutivement, $x$ représente le nombre de changement de $x_1$ dans mon algorithme de génération.
Une fois $x$ calculé, on posera $\sigma(n)=(x+1, n - \sum_{i=1}^{x} \big(\left\lfloor \frac{2016-i}{2} \right\rfloor - i + 1\big))$ (je n'ai pas indiqué $x_3$, mais il est calculé pour arriver à la somme requise).
Cela dit, en supposant que c'est correct, je ne sais pas si ça répond au critière d'élégance (le calcul de $\sigma$ n'est pas naturel)
#805 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 01-08-2016 20:58:26
Un point me semble assez intriguant, les 18 premiers triplets ont tous leurs deux dernière composantes égales.
Je me demande si c'est une coïncidence due au nombre 2016 ou bien si, quelque que soit cette somme, le maximum sera toujours atteint lorsque cette condition est vérifiée.
A ce stade de ma compréhension de cette relation de pseudo-ordre, la réponse à cette question me semble inatteignable.
#806 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 01-08-2016 20:52:58
Je poste ci-dessous le code Python du programme qui calcule la liste des 100 meilleurs triplets.
Le programme met 16 mn à tourner sur ma machine. Il n'est probablement pas très optimisé.
from threading import Thread, RLock
import time
import sys
import datetime
import math
import csv
SumNumber = 2016
#SumNumber = 60
def out_csv(l, fname):
with open(fname, 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=';')
for e in l:
writer.writerow(e)
def get_triples():
return [(i,j,SumNumber-i-j) for i in range(1, SumNumber//3 + 1) for j in range (i, (SumNumber-i)//2+1)]
def case1(a,b,c):
if b-a < 3:
return 0
n = 0
for d_a in range(2,b-a):
b_inf = math.ceil(max(1,0.5*(d_a - (c-b))))
b_sup = math.floor(min(d_a-1,(b-a)-d_a))
if b_inf <= b_sup:
n += (b_sup-b_inf+1)
return n
def case2(a,b,c):
if a < 2:
return 0
n = 0
for d_a in range(1,a):
b_inf = d_a + 1
b_sup = math.floor(0.5*(c-b+d_a))
if b_inf <= b_sup:
n += (b_sup-b_inf+1)
return n
def case3(a,b,c):
n = 0
c_sup = min(SumNumber-2-c,b+a-2)
for d_c in range(1,c_sup+1):
a_inf = math.ceil(max(1,0.5*(d_c-(b-a))))
a_sup = min(d_c-1,a-1)
if a_inf <= a_sup:
n += (a_sup-a_inf+1)
return n
def count_lowers(x):
k1 = case1(x[0],x[1],x[2])
k2 = case2(x[0],x[1],x[2])
k3 = case3(x[0],x[1],x[2])
return k1+k2+k3
def cmp_triple(a,b):
return sum([1 if a[i] > b[i] else 0 for i in range(3)]) > 1
class Worker(Thread):
def __init__(self, population, start_index, count, store,verrou):
Thread.__init__(self)
self.population = population
self.start_index = start_index
self.count = count
self.store = store
self.verrou = verrou
def run(self):
chunk_size = 0
r = []
for i in range(self.start_index, self.start_index + self.count):
r.append([self.population[i][0],self.population[i][1],self.population[i][2], count_lowers(self.population[i])])
chunk_size += 1
if chunk_size == 100:
with verrou:
for x in r:
self.store.append(x)
chunk_size = 0
r = []
if r != []:
with verrou:
for x in r:
self.store.append(x)
nombre_de_threads = 5
population = get_triples()
threads = []
store = []
verrou = RLock()
count_total = len(population)
count = int(count_total/nombre_de_threads)
for i in range(nombre_de_threads):
start_index = int(i*count)
if i == nombre_de_threads-1:
th_count = int(count_total - (nombre_de_threads-1)*count)
else:
th_count = count
threads.append(Worker(population, start_index, th_count, store, verrou))
start_time = time.clock()
for i in range(nombre_de_threads):
threads[i].start()
Finished = False
while not Finished:
time.sleep(2)
with verrou:
Completed = len(store)
if Completed == count_total:
Finished=True
else:
duration = time.clock()
estimated_remaining = (count_total-Completed)*duration/Completed
duree = str(datetime.timedelta(seconds=duration))
duree_restante = str(datetime.timedelta(seconds=estimated_remaining))
print('\rCompleted : {0}/{1}, Temps passé : {2}, temps restant estimé : {3}'.format(Completed, count_total, duree, duree_restante), end="")
store.sort(key=lambda x: x[3], reverse=True)
out_csv(store[:100], 'resultats_triplets.csv')
#out_csv(store, 'resultats_triplets.csv')
#807 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 01-08-2016 16:09:32
@yoshi,
Je fais aussi mon "tetra capillo secator"(*) : la valeur 3 est impossible
L'astuce est en effet pas mal car elle réduit le nombre de comparaisons. Avec mon code, on peut être amené à faire jusqu'à 6 comparaisons.
Pour rendre le code plus lisible, je propose l'écriture suivante ):
def is_lower(a,b)
return sum([1 if a[i] < b[i] else 0 for i in range(3)]) > 1
(*) : coupeur de cheveu en quatre. Sachant que la construction est un peu bancale, elle mélange latin et grecs, mais vues mes origines, je peux me permettre sans scrupules !
#808 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 01-08-2016 08:07:20
Bonjour yoshi,
Le plaisir de programmer : oui, mais là, minime...
Je respecte tout à fait ce type de distractions, j'ai les mêmes à la maison ;-)
Je ne me suis lancé que parce que j'ai cru détecter (et en réponse à...) une insatisfaction dubitative chez notre ami Dlz qui avait pondu sa propre solution...
Je pense que c'est peine perdue !
Je poste une démonstration, il ne semble pas intéressé
Tu postes une simulation, il en sort une autre qui, sous prétexte d'utiliser tel langage ou telle implémentation de rand(), donne de meilleurs résultats (en faisant fi de ma remarque au post #31 et celle de leon au post #64 alors que c'est déterminant pour les résultats).
#809 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 31-07-2016 20:30:11
@leon : C'est en effet plus juste, mais ça ne changera en pratique pas le résultat parce que les triplets ont quasiment tous la même proba de gagner (ça va de 76,76% à 76,25%).
J'avoue ne pas comprendre l'intérêt de ces simulations. Je m'explique : Supposons donné un ensemble fini non vide $E$ de cardinal connu, et supposons donnée une propriété $P$ que les éléments $x \in E$ peuvent ou pas vérifier. On notera $H$ le sous ensemble de $E$ des éléments vérifiant la propriété : $H = \{ x \in E \ | \ P(x) \}$. et on s'intéresse à la probabilité qu'un élément tiré au hasard dans $E$ soit dans $H$. Par définition, cette probabilité est donnée par $\mathbb{P}(H) = \frac{|H|}{|E|}$.
Si on connait $|H|$, le problème est plié, on connait la réponse exacte. Il n'y a donc besoin d'aucune simulation.
Si on ne connait pas $|H|$ mais qu'on a un moyen de vérifier la propriété $P$ (par exemple, la propriété $P(x) := x$ est premier ), alors une simulation peut être un bon moyen d'estimer $|H|$.
Ici, on est dans le premier cas de figure.
Pour un triplet $c$ donné, l'ensemble $H$ est l'ensemble des triplets qui perdent contre $c$. Et l'objet de ma démonstration a été de trouver un moyen rapide de calculer $|H|$ (on avait déjà une méthode très lente, il suffisait de scanner tous les autres triplets et les comparer à $c$). Donc, pour un triplet $c$ choisi par l'homme, on connait exactement la probabilité qu'il gagne contre un triplet pris au hasard. Pourquoi fait-on une simulation ?
#810 Re : Entraide (supérieur) » développer et réduire » 31-07-2016 20:08:31
Bonsoir,
j'ai essayé ça :
(j'ai juste ajouté p0, p1, p2 et w en tant que symboles et mis '.' à la place de ',' dans 0,2
>> syms y p0 p1 p2 w
>> f= ((y+0.2*(p0 +(p1*w)+(p2*w^2)))^5 )
f =
((p2*w^2)/5 + (p1*w)/5 + p0/5 + y)^5
>> expand(f)
ans =
p0^5/3125 + (p0^4*p1*w)/625 + (p0^4*p2*w^2)/625 + (p0^4*y)/125 + (2*p0^3*p1^2*w^2)/625 + (4*p0^3*p1*p2*w^3)/625 + (4*p0^3*p1*w*y)/125 + (2*p0^3*p2^2*w^4)/625 + (4*p0^3*p2*w^2*y)/125 + (2*p0^3*y^2)/25 + (2*p0^2*p1^3*w^3)/625 + (6*p0^2*p1^2*p2*w^4)/625 + (6*p0^2*p1^2*w^2*y)/125 + (6*p0^2*p1*p2^2*w^5)/625 + (12*p0^2*p1*p2*w^3*y)/125 + (6*p0^2*p1*w*y^2)/25 + (2*p0^2*p2^3*w^6)/625 + (6*p0^2*p2^2*w^4*y)/125 + (6*p0^2*p2*w^2*y^2)/25 + (2*p0^2*y^3)/5 + (p0*p1^4*w^4)/625 + (4*p0*p1^3*p2*w^5)/625 + (4*p0*p1^3*w^3*y)/125 + (6*p0*p1^2*p2^2*w^6)/625 + (12*p0*p1^2*p2*w^4*y)/125 + (6*p0*p1^2*w^2*y^2)/25 + (4*p0*p1*p2^3*w^7)/625 + (12*p0*p1*p2^2*w^5*y)/125 + (12*p0*p1*p2*w^3*y^2)/25 + (4*p0*p1*w*y^3)/5 + (p0*p2^4*w^8)/625 + (4*p0*p2^3*w^6*y)/125 + (6*p0*p2^2*w^4*y^2)/25 + (4*p0*p2*w^2*y^3)/5 + p0*y^4 + (p1^5*w^5)/3125 + (p1^4*p2*w^6)/625 + (p1^4*w^4*y)/125 + (2*p1^3*p2^2*w^7)/625 + (4*p1^3*p2*w^5*y)/125 + (2*p1^3*w^3*y^2)/25 + (2*p1^2*p2^3*w^8)/625 + (6*p1^2*p2^2*w^6*y)/125 + (6*p1^2*p2*w^4*y^2)/25 + (2*p1^2*w^2*y^3)/5 + (p1*p2^4*w^9)/625 + (4*p1*p2^3*w^7*y)/125 + (6*p1*p2^2*w^5*y^2)/25 + (4*p1*p2*w^3*y^3)/5 + p1*w*y^4 + (p2^5*w^10)/3125 + (p2^4*w^8*y)/125 + (2*p2^3*w^6*y^2)/25 + (2*p2^2*w^4*y^3)/5 + p2*w^2*y^4 + y^5
#811 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 31-07-2016 11:26:06
Bonsoir Yassine,
As-tu fait une vérification statistique ?
Bonjour,
J'ai du mal à comprendre tes interventions.
D'abord, je ne vois pas ce que serait une "vérification statistique" dans le cas présent. Au mieux, on pourrait parler d'une simulation à l'aide d'un générateur de nombre pseudo-aléatoires.
Ensuite, quand on démontre mathématiquement une propriété, on ne "vérifie pas statistiquement" la propriété ! Si on démontre la formule de Al-Kashi pour un triangle quelconque, on ne va pas tirer au hasard les coordonnées d'un triangle pour vérifier la formule ou faire le tour de la terre et vérifier à chaque triangle qu'on trouve la formule !!!
Ce que j'ai démontré, c'est un fait concernant des cardinaux d'ensembles particuliers. Je ne vois pas le début du commencement de l'ombre d'une vérification statistique ! De plus, la seule vertu d'une simulation serait de vérifier la qualité du générateur de nombres pseudo-aléatoires utilisé !
#812 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 30-07-2016 18:34:57
#813 Re : Café mathématique » Le nombre non autorisée » 30-07-2016 13:04:45
Mais le mal est fait, parler d'un nombre non autorisé est lui même non autorisé !
Si je dis par exemple : le plus petit des nombres non autorisés, je l'ai identifié de manière non ambiguë. Du coup, cette page Web commence à sentir le roussi !
#814 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 30-07-2016 11:11:57
Bonjour,
Après quelques tentatives, j'ai fini par trouver un moyen pour bien compter les triplets.
Du coup, je poste pour le moment la "démonstration informatique" sous forme d'un code Python. Le code exhibe une liste de 100 triplets et montre que l'espérance du nombre de parties gagnées est > à 75.
Je posterai un peu plus tard les détails mathématiques de la méthode.
import time
SumNumber = 2016
def get_triples():
return [(i,j,SumNumber-i-j) for i in range(1, SumNumber//3 + 1) for j in range (i, (SumNumber-i)//2+1)]
def is_lower(a,b):
return (b[0]>a[0] and b[1]>a[1]) or (b[0]>a[0] and b[2]>a[2]) or (b[1]>a[1] and b[2]>a[2])
def get_lowers(a, population):
return [x for x in population if is_lower(x,a)]
def compute_expectation(solution, population):
count = len(population)
return sum([len(get_lowers(x, population))/count for x in solution])
solution = [
(466, 775, 775), (464, 776, 776), (468, 774, 774), (462, 777, 777), (470, 773, 773), (460, 778, 778), (472, 772, 772), (458, 779, 779), (474, 771, 771), (456, 780, 780),
(476, 770, 770), (454, 781, 781), (478, 769, 769), (452, 782, 782), (465, 775, 776), (467, 774, 775), (463, 776, 777), (480, 768, 768), (469, 773, 774), (461, 777, 778),
(471, 772, 773), (459, 778, 779), (450, 783, 783), (473, 771, 772), (457, 779, 780), (482, 767, 767), (475, 770, 771), (455, 780, 781), (448, 784, 784), (477, 769, 770),
(484, 766, 766), (453, 781, 782), (479, 768, 769), (464, 775, 777), (466, 774, 776), (462, 776, 778), (446, 785, 785), (468, 773, 775), (451, 782, 783), (460, 777, 779),
(486, 765, 765), (470, 772, 774), (458, 778, 780), (472, 771, 773), (481, 767, 768), (449, 783, 784), (456, 779, 781), (474, 770, 772), (444, 786, 786), (488, 764, 764),
(454, 780, 782), (483, 766, 767), (476, 769, 771), (447, 784, 785), (452, 781, 783), (478, 768, 770), (442, 787, 787), (465, 774, 777), (463, 775, 778), (485, 765, 766),
(467, 773, 776), (490, 763, 763), (461, 776, 779), (469, 772, 775), (450, 782, 784), (459, 777, 780), (445, 785, 786), (480, 767, 769), (471, 771, 774), (457, 778, 781),
(473, 770, 773), (455, 779, 782), (487, 764, 765), (448, 783, 785), (440, 788, 788), (482, 766, 768), (492, 762, 762), (443, 786, 787), (475, 769, 772), (453, 780, 783),
(446, 784, 786), (477, 768, 771), (451, 781, 784), (484, 765, 767), (489, 763, 764), (464, 774, 778), (462, 775, 779), (466, 773, 777), (438, 789, 789), (460, 776, 780),
(441, 787, 788), (468, 772, 776), (479, 767, 770), (494, 761, 761), (458, 777, 781), (470, 771, 775), (449, 782, 785), (444, 785, 787), (456, 778, 782), (472, 770, 774)
]
start_time = time.clock()
population = get_triples()
expectation = compute_expectation(solution, population)
duration = time.clock() - start_time
print("Espérance = {0:.4} (temps de calcul : {1:.4}s)".format(expectation,duration))
Le programme produit l'affichage suivant :
Espérance = 76.65 (temps de calcul : 15.6s)
#815 Re : Café mathématique » Probabilité sur une liste d'attente » 29-07-2016 11:01:37
Re,
J'ai en effet suggéré cette action à mon ami.
Bonne journée
#816 Re : Café mathématique » Probabilité sur une liste d'attente » 29-07-2016 08:19:40
Bonjour,
@yoshi : désolé d'avoir posté dans la mauvaise rubrique.
Merci freddy.
De ma compréhension, le système maintenant ressemble à APB. Chaque candidat est censé recevoir le meilleur choix, selon le classement qu'il a effectué auparavant. L'attribution n'est pas définitive car certains candidats préfèrent faire 5/2 et se désistent.
La proba que 5 élèves ne décident pas de faire 5/2 dans les écoles avant que les candidat classent avant Centrale Lyon (Centrale Paris, Mines, Pont, Telecom, X) est quand même très faible.
#817 Re : Café mathématique » Probabilité sur une liste d'attente » 28-07-2016 17:00:14
Il est dans les 5 premiers de la liste d'attente (je ne donne pas le rang exact pour préserver un certain anonymat).
#818 Café mathématique » Probabilité sur une liste d'attente » 28-07-2016 14:48:57
- Yassine
- Réponses : 9
Bonjour à tous,
Le fils d'un ami est dans les premiers de la liste d'attente de l'Ecole Centrale de Lyon.
Il voudrait connaitre ses chances d'être pris. Est-ce que vous avez une idée du nombre de "repêchés" de la liste d'attente ?
Il y a toujours un lot d'étudiants qui préfèrent faire 5/2, le tout est d'estimer ce nombre !
#819 Re : Entraide (supérieur) » Rectificatif » 27-07-2016 14:17:50
Redna,
Je pense que personne ne peut t'aider si tu ouvres à chaque fois un nouveau sujet. Il y a un lien 'Répondre' (et même deux) sur la droite des messages qui te permettent de rester sur la même discussion. Ouvrir une 'Nouvelle discussion', comme son nom l'indique, c'est changer de sujet.
Ton rectificatif ci-dessous comporte lui même des erreurs (ça veut dire quoi : u'=g' et =h').
Par ailleurs, dans ta deuxième équation, il y a un 'f2' qu'il est difficile d'interpréter (indice, multiplication par 2).
Bref, sans un effort de ta part, il m'est impossible de considérer ton problème. Peut-être que d'autre sauront mieux que moi te répondre.
#820 Re : Entraide (supérieur) » systeme de 3 équations differencielles de 5 foncttions » 26-07-2016 15:36:01
Bonjour,
Je pense que pour le confort de ceux qui pourraient t'aider, il faut essayer d'écrire ton système en Latex (il y a une rubrique du forum qui explique comment faire).
Par exemple, pour ta première équation, ça donnerait
$f”+\frac{1}{5}p_1’f+\frac{1}{5}p_1f’+\frac{2}{5}p_2’fg+\frac{2}{5}p_2fu’+\frac{1}{5}p_2gf’=0$
Quelques remarques :
- dans ton système, il y a plus de fonctions que juste $f$, $g$, $h$, $p_1$ et $p_2$. Je vois des $u'$ et $\varphi'$ ?
- C'est un système non linéaire. Quand tu parles de résoudre, est-ce une solution numérique approchée ou une solution exprimable à l'aide de fonctions usuelles ?
- Quel est le contexte de ce système ? (ça peut aider)
#821 Re : Café mathématique » Pierre feuille ciseaux » 26-07-2016 14:54:46
Pas sûr d'avoir tout compris yoshi, probablement parce que mon niveau aux échec n'est pas loin de celui d'un débutant ;-)
Néanmoins, quand tu dis
Celui qui joue une ouverture :
* le fait en fonction de son tempérament, de ses goûts en termes de positions qu'il va rencontrer...
* doit (devrait) savoir ce qu'il fait en termes de contrôles de cases ou de lignes, d'affaiblissement de lignes ou de cases... les thèmes d'attaque...
C'est un peu ce que je qualifie de hasard, c'est à dire qu'il y a peut être un explication rationnelle (si j'ai la fonction d'onde de l'univers au moment de la décision, il y a une chance d'objectiver tout ça) mais le nombre de paramètres à prendre en compte est tellement important qu'on s'en remet au jugement aléatoire pour qualifier la décision.
Maintenant, il n'est pas question de dire que cet aléa est identique quelque soit le joueur. Un maitre d'échec aura un hasard beaucoup plus concentrés sur les coups qui mènent à la victoire qu'un débutant.
#822 Re : Café mathématique » Pierre feuille ciseaux » 26-07-2016 11:12:19
Pour le jeu d'échecs, il me semble difficile d'admettre la proposition inverse, à savoir que la partie est déterministe.
Sans parler du premier tirage au sort pour les pions blancs, à plusieurs phases du jeu, le joueur doit faire un choix entre des coups dont la fonction d'utilité est indiscernable (ne serait-ce qu'au début pour le choix de l'ouverture).
D'ailleurs, les programmes informatiques qui jouent à ce types de jeu (je sais que c'est le cas pour le dernier programme de Go qui a battu Sedol) utilisent une technique de Monté-Carlo pour ne pas explorer toutes les branches de l'arbre de décision.
La hasard est donc encore présent dans ces jeux, c'est juste que si tu mets un débutant face à un maitre d'échecs, la probabilité de gain du débutant doit être proche de zéro.
#823 Re : Café mathématique » Pierre feuille ciseaux » 26-07-2016 09:27:14
Bonjour tibo,
Vaste question !
Est-ce que tu appelles 'jeu de hasard' un jeu où la hasard intervient à un moment ou un autre ou alors un jeu où les issues sont équiprobables ?
#824 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 26-07-2016 07:51:55
Salut,
Oui, je suis d'accord que c'est la voie à privilégier.
#825 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Peut - on battre le hasard ? » 25-07-2016 20:49:52
Je viens d'écrire un programme Python qui fait la boucle, j'ai activé le multithreading pour bénéficier des coeurs multiples des machines d'aujourd'hui.
J'ai mis un petit calcul du temps estimé, il m'affiche 19 jours !
Je mets ci-dessous le code si quelqu'un à une idée d'amélioration.
Sinon, pour faire un truc ludique, on pourrait se partager les plages à examiner, chacun postant le bout de résultat qu'il aura trouvé.
import random as r
from threading import Thread, RLock
import time
import sys
import datetime
nombre_de_threads = 5
def out_csv(l, fname):
with open(fname, 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=';')
for e in l:
writer.writerow(e)
def get_triples():
triples = []
for i in range(1, int(2016/3) + 1):
for j in range (i, int(0.5*(2016-i))+1):
elt = (i,j,2016-i-j)
triples.append(elt)
return triples
def cmp_triple(a,b):
return (a[0]>b[0] and a[1]>b[1]) or (a[0]>b[0] and a[2]>b[2]) or (a[1]>b[1] and a[2]>b[2])
def count_wins(a,lb):
return sum([(1 if cmp_triple(a,b) else 0) for b in lb])
class Worker(Thread):
def __init__(self, population, start_index, count, store,verrou):
Thread.__init__(self)
self.population = population
self.start_index = start_index
self.count = count
self.store = store
self.verrou = verrou
def run(self):
for i in range(self.start_index, self.start_index + self.count):
r = (self.population, count_wins(self.population[i], self.population))
with verrou:
self.store.append(r)
population = get_triples()
threads = []
store = []
verrou = RLock()
count_total = len(population)
count = int(count_total/nombre_de_threads)
for i in range(nombre_de_threads):
start_index = int(i*count)
if i == nombre_de_threads-1:
th_count = int(count_total - (nombre_de_threads-1)*count)
else:
th_count = count
threads.append(Worker(population, start_index, count, store, verrou))
start_time = time.clock()
for i in range(nombre_de_threads):
threads[i].start()
Finished = False
while not Finished:
time.sleep(2)
with verrou:
Completed = len(store)
if Completed == len(population):
Finised=True
else:
duration = time.clock()
estimated_remaining = (count_total-Completed)*Completed/duration
duree = str(datetime.timedelta(seconds=duration))
duree_restante = str(datetime.timedelta(seconds=estimated_remaining))
print('\rTemps passé : {0}, temps restant estimé : {1}'.format(duree, duree_restante), end="")
out_csv(store, 'resultats_triplets.csv')







