[PYTHON] Théorie de la file d'attente, partie 4

[Études de congestion](https://www.amazon.co.jp/%E6%B8%8B%E6%BB%9E%E5%AD%A6-%E6%96%B0%E6%BD%AE%E9 % 81% B8% E6% 9B% B8-% E8% A5% BF% E6% 88% 90-% E6% B4% BB% E8% A3% 95 / dp / 4106035707) Je vais vous expliquer.

Qu'est-ce que l'étude de la congestion?

Dans le livre lié ci-dessus, la congestion est définie comme "un état qui se produit lorsqu'une population d'individus avec un effet de volume d'exclusion qui fonctionne dans certaines conditions dépasse une certaine densité." Cela signifie «une particularité qui survient lorsque des individus opérant dans certaines conditions dépassent une certaine densité (densité critique) dans un groupe qui existe sans chevauchement (plusieurs individus occupent le même espace). C'est un phénomène. " Vous ne savez probablement pas encore de quoi vous parlez, alors prenons une voiture comme exemple. Notez que le principe est que la ligne se compose uniquement d'individus = voitures et de groupes = voitures. Ensuite, la congestion est un phénomène qui se produit lorsqu'un véhicule dépasse une certaine densité de trafic en vertu de la règle d'avancer lorsque l'avant est ouvert, et il devient difficile pour de nombreuses voitures d'avancer ou la vitesse est supérieure à la vitesse légale. C'est une situation particulière, comme celle de ne pouvoir rouler qu'à une vitesse nettement plus lente. " Je parlerai de cette voiture à l'avenir. Si vous voulez connaître le trafic que peuvent gérer les embouteillages autres que les voitures, accédez à Google ou à Amazon [Traffic Studies](https://www.amazon.co.jp/%E6%B8%8B%E6%BB%9E] % E5% AD% A6-% E6% 96% B0% E6% BD% AE% E9% 81% B8% E6% 9B% B8-% E8% A5% BF% E6% 88% 90-% E6% B4% BB% E8% A3% 95 / dp / 4106035707) Veuillez acheter et lire.

Une simple simulation du trafic automobile

Cette fois, j'utiliserai l'automate cellulaire comme simulation la plus simple. L'automate cellulaire est appelé un jeu de vie s'il s'agit d'une règle bidimensionnelle, mais cette fois c'est une règle unidimensionnelle qui dit "Si la précédente est vide, continuez". Pour les automates à cellules [Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%AB%E3%83%BB%E3%82%AA%E3%83%BC % E3% 83% 88% E3% 83% 9E% E3% 83% 88% E3% 83% B3) Voir.

Programme Python pour la simulation

Tout d'abord, mettez le code.

trafic.py


# -*- coding: utf-8 -*-

#Changement de congestion dû à un automate cellulaire unidimensionnel
import random
import copy

MAX = 45
SIM_TIME = 5
P = 0.6

#L'état 0 est un espace vide sans voiture
#L'état 1 représente un véhicule
trafic = [0 for i in range(MAX)]


def list2string(l):
    string = ""
    for state in l:
        if state == 0:
            s = "□ "
        elif state == 1:
            s = "■ "
        string += s
    return string


def setRandom(l, p):
    for i, state in enumerate(l):
        if p < random.random():
            l[i] = 0
        else:
            l[i] = 1


def nextTime(l):
    temp = copy.deepcopy(l)
    for i, state in enumerate(l):
        if state == 0:
            #À l'extrême gauche
            if i == 0:
                temp[i] = 0
            #Vérifiez en arrière à d'autres moments
            elif l[i-1] == 0:
                temp[i] = 0
            else:
                temp[i] = 1

        elif state == 1:
            #À l'extrême droite
            if i == len(l)-1:
                temp[i] = 0
            #Vérifiez avant à d'autres moments
            elif l[i+1] == 0:
                temp[i] = 0
            else:
                temp[i] = 1
    return temp

if __name__ == "__main__":
    #Partie exécution
    setRandom(trafic, P)
    print(list2string(trafic))

    for i in range(SIM_TIME):
        #Mettre à jour les informations
        trafic = nextTime(trafic)
        #Dessiner des informations sous forme de caractères
        print(list2string(trafic))

Je vais expliquer le code.

Décrit les variables et les constantes définies en premier. La variable MAX représente la taille maximale du trafic définie ultérieurement, c'est-à-dire la longueur maximale des voitures alignées. Le prochain SIM_TIME est la durée pour effectuer la simulation, et P est la densité du trafic. Et la liste appelée trafic est une liste qui ne prend que deux types d'états, (1) avec une voiture et (0) sans voiture, et est unifiée à 0 comme initialisation au début.

La fonction définie est expliquée ci-dessous. La première fonction list2string est une fonction qui convertit □ et ■ en un caractère et renvoie un caractère pour une liste qui n'a que 0 et 1 états donnés en arguments. La fonction setRandom est une fonction qui définit s'il y a ou non une voiture avec la valeur du deuxième argument comme limite. La fonction nextTime est une fonction qui vérifie s'il faut continuer en fonction de l'état de la voiture à ce moment-là et renvoie l'état suivant. Vous pouvez voir la classification des cas en regardant les commentaires.

Le dernier est la partie exécution. Il n'est pas nécessaire d'expliquer ici et je pense que les commentaires sont suffisants. Vous pouvez réécrire ce code pour en faire une route circulaire ou sortir de la boucle lorsque toutes les voitures sont parties.

Résumé et explication des résultats de la simulation

Si vous modifiez certaines valeurs de P et que vous l'exécutez, le comportement changera considérablement lorsque P est égal à 0,5. (Comme il utilise des nombres aléatoires, cela peut ne pas changer beaucoup.)

Considérez pourquoi cela change. En premier lieu, il est indispensable que l'avant soit ouvert pour que la voiture puisse bouger. Je vais donc essayer de remplir l'avant ouvert de n'importe quelle voiture avec n'importe quelle voiture. Ensuite, l'état devrait être l'état où la présence et l'absence de la voiture apparaissent alternativement. Bien sûr, dans cet état, je pense que nous pouvons procéder sans encombre et sans encombrement. Mais qu'en est-il de mettre une voiture là-dedans? Je pense que le trafic se produira peu importe où vous mettez votre voiture. La valeur de 0,5 à ce moment est appelée densité critique du trafic. Si la densité critique n'est pas dépassée, si cela prend du temps, même s'il y a une certaine congestion, elle sera éliminée. Cependant, s'il dépasse, il ne sera pas résolu pour toujours. En fait, on sait que ce résultat tient même dans la réalité, bien que la valeur de la densité critique soit différente. Par conséquent, dans les endroits où la congestion se produit fréquemment, la congestion est éliminée en tenant compte de cette idée de densité critique.

finalement

Une explication plus détaillée de l'explication donnée ici est donnée au début [Études de congestion](https://www.amazon.co.jp/%E6%B8%8B%E6%BB%9E%E5%AD%A6- % E6% 96% B0% E6% BD% AE% E9% 81% B8% E6% 9B% B8-% E8% A5% BF% E6% 88% 90-% E6% B4% BB% E8% A3% 95 Vous pouvez également le trouver dans le livre / dp / 4106035707). Il existe d'autres types de trafic intéressants tels que "trafic favorable", veuillez donc le lire.

Recommended Posts

Théorie de la file d'attente, partie 4
Théorie de la file d'attente partie 3
datetime partie 1
numpy partie 1
argparse partie 1
numpy partie 2
Test mathématique 2 (modèle mathématique de la théorie de la réaction des items)