Skip to content

генетический алгоритм!!!!! #26

@KremlevLev

Description

@KremlevLev

import math
def qZ(x, y):
return (x + 3 * y) / (x ** 2 + y ** 2 + 1)
def qSumZ(Z):
return sum(Z)
def sorting(Z):
sorId = sorted(range(len(Z)), key=lambda k: Z[k])
return sorId
def exchangeScheme(oldX, oldY, sorId):
X = [0 for i in range(4)]
Y = [0 for i in range(4)]

X[2] = oldX[sorId[2]]
X[3] = oldX[sorId[2]]
X[0] = oldX[sorId[0]]
X[1] = oldX[sorId[1]]

Y[0] = oldY[sorId[2]]
Y[1] = oldY[sorId[2]] 
Y[2] = oldY[sorId[0]]
Y[3] = oldY[sorId[1]]
return X, Y 

def evoStep(X, Y, Z):
_, minId = min((value, id) for (id, value) in enumerate(Z))
X = X[:]
Y = Y[:]
Z = Z[:]
X.pop(minId)
Y.pop(minId)
Z.pop(minId)
return X, Y, Z

def evoSteps(X, Y, stepsNum=4):
results = []
for i in range(stepsNum):
arrZ = [qZ(val, Y[j]) for j, val in enumerate(X)]
X_new, Y_new, Z_new = evoStep(X, Y, arrZ)
X, Y = exchangeScheme(X_new, Y_new, sorting(Z_new))
results.append([X, Y, qSumZ(arrZ), arrZ])
return X, Y, results
X = [-5, -3, -2, -1]
Y = [-1, -2, 0, 1]
finalX, finalY, results = evoSteps(X, Y)

for i in range(len(results)):
print(f'max_{i + 1}_step: {max(results[i][3]):.4f}')
qualityArrZ = []
for i in range(len(results)):
qualityArrZ += results[i][3]
print(f'max Z: {max(qualityArrZ):.4f}')

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions