Ifi6057w5ex: erinevus redaktsioonide vahel
Mine navigeerimisribale
Mine otsikasti
Uus lehekülg: 'N lipu paigutamine lokaalse otsinguga. <code> import search import random class HCNQueens(search.Problem): def __init__(self, N): self.N = N self.init...' |
Resümee puudub |
||
| 1. rida: | 1. rida: | ||
N lipu paigutamine lokaalse otsinguga. | N lipu paigutamine lokaalse otsinguga. | ||
< | <pre> | ||
import search | import search | ||
import random | import random | ||
| 75. rida: | 75. rida: | ||
print(hill_climbing(p)) | print(hill_climbing(p)) | ||
</ | </pre> | ||
Viimane redaktsioon: 11. oktoober 2017, kell 08:19
N lipu paigutamine lokaalse otsinguga.
import search
import random
class HCNQueens(search.Problem):
def __init__(self, N):
self.N = N
self.initial = [None]*N
for i in range(N):
self.initial[i] = random.randint(0,N-1)
def actions(self, state):
acts = []
for i in range(self.N):
pos = state[i]
for j in range(self.N):
if j == pos: continue
acts.append((i, j))
return acts
def result(self, state, action):
i, j = action
newstate = list(state)
newstate[i] = j
return newstate
def conflict(self, row1, col1, row2, col2):
"""Would putting two queens in (row1, col1) and (row2, col2) conflict?"""
return (row1 == row2 or # same row
col1 == col2 or # same column
row1 - col1 == row2 - col2 or # same \ diagonal
row1 + col1 == row2 + col2) # same / diagonal
def value(self, state):
h = 0
for col in range(self.N - 1):
row = state[col]
for col2 in range(col + 1, self.N):
row2 = state[col2]
if self.conflict(row, col, row2, col2):
h += 1
return h
def hill_climbing(problem):
current = problem.initial
curr_value = problem.value(problem.initial)
while True:
max_value = 99999
for action in problem.actions(current):
neighbor = problem.result(current, action)
neigh_value = problem.value(neighbor)
if neigh_value < max_value:
max_neighbor = neighbor
max_value = neigh_value
if max_value >= curr_value:
break
else:
current = max_neighbor
curr_value = max_value
print (curr_value, current)
return current
p = HCNQueens(36)
print(p.value(p.initial), p.initial)
#print(p.value([2,1,2,1]))
#print (p.actions(p.initial))
#print (p.result(p.initial,p.actions(p.initial)[0]))
print(hill_climbing(p))