13.6 Bouwsteen 4 — itereren tot het stabiel is
Hier bouw je op verder
- Python De while-loop
Leerdoel: je herhaalt de update voor álle pagina's tot de ranks nauwelijks meer veranderen — dán heb je de PageRank.
Het kip-ei-probleem oplossen
Je kunt de rank van een pagina pas goed berekenen als je de ranks van de
anderen kent. De truc: begin met de startverdeling, reken één volledige
ronde uit (alle pagina's, op basis van de waarden uit de vorige
ronde), en herhaal. Na elke ronde veranderen de waarden minder; je stopt
als de grootste verandering kleiner is dan een kleine epsilon.
Let op: bereken een ronde altijd uit de ranks van de vorige ronde, niet uit ranks die je deze ronde al hebt aangepast.
Bouw en test
Code-omgeving wordt voorbereid…
Antwoord
def pagerank(web, d=0.85, epsilon=1e-9):
rank = startverdeling(web)
while True:
nieuw = {}
for p in web:
nieuw[p] = nieuwe_rank(web, rank, p, d)
verschil = 0.0
for p in web:
verschil = max(verschil, abs(nieuw[p] - rank[p]))
rank = nieuw
if verschil < epsilon:
return rank
De eerste loop bouwt álle nieuwe ranks uit de oude rank voordat je
rank overschrijft — precies wat je nodig hebt.
Door naar stap 7: compleet →.