예제 #1
0
def cross(solution1, solution2):
    levelS1 = solution1.levelSkeleton
    levelS2 = solution2.levelSkeleton
    resultWalls1 = []
    resultWalls2 = []
    for wall1, wall2 in zip(levelS1.wallSkeletons, levelS2.wallSkeletons):
        w1, w2 = crossWalls(wall1, wall2, random.uniform(0, 1))
        resultWalls1.append(w1)
        resultWalls2.append(w2)
    s1 = Solution(
        LevelSkeleton(resultWalls1, levelS1.slabSkeleton, levelS1.level))
    s2 = Solution(
        LevelSkeleton(resultWalls2, levelS1.slabSkeleton, levelS1.level))
    return s1, s2
예제 #2
0
def cross(solution1, solution2):
    levelS1 = solution1.levelSkeleton
    levelS2 = solution2.levelSkeleton
    resultWalls1 = []
    resultWalls2 = []
    wallSkeletons1 = []
    wallSkeletons2 = []
    reserve1 = []
    reserve2 = []

    for wallskeleton in levelS1.wallSkeletons:
        if not wallskeleton.iscolumnParent:
            wallSkeletons1.append(wallskeleton)
        else:
            reserve1.append(wallskeleton)

    for wallskeleton in levelS2.wallSkeletons:
        if not wallskeleton.iscolumnParent:
            wallSkeletons2.append(wallskeleton)
        else:
            reserve2.append(wallskeleton)

    for wall1, wall2 in zip(wallSkeletons1, wallSkeletons2):
        rand = random.uniform(0, 1)
        if rand < 0.5:
            resultWalls1.append(wall1)
            resultWalls2.append(wall2)
        else:
            resultWalls1.append(wall2)
            resultWalls2.append(wall1)

    for wall in reserve1:
        resultWalls1.append(wall)
    for wall in reserve2:
        resultWalls2.append(wall)
    s1 = Solution(
        LevelSkeleton(resultWalls1, levelS1.slabSkeleton, levelS1.level))
    s2 = Solution(
        LevelSkeleton(resultWalls2, levelS1.slabSkeleton, levelS1.level))
    a = s1.levelSkeleton.ScoreOfUnacceptableVoiles()
    b = s2.levelSkeleton.ScoreOfUnacceptableVoiles()
    # print(a,b)
    if 0 < a[0] < 0.9:
        s1 = fixShortbeam(s1, a)
    if 0 < b[0] < 0.9:
        s1 = fixShortbeam(s2, b)
    return s1, s2
예제 #3
0
def merge(solution1, solution2):
    levelS1 = solution1.levelSkeleton
    levelS2 = solution2.levelSkeleton
    resultWalls = []
    for wall1, wall2 in zip(levelS1.wallSkeletons, levelS2.wallSkeletons):
        resultWalls.append(mergeWalls(wall1, wall2))
    return Solution(
        LevelSkeleton(resultWalls, levelS1.slabSkeleton, levelS1.level))
예제 #4
0
def cross(solution1,solution2):
    levelS1 = solution1.levelSkeleton
    levelS2 = solution2.levelSkeleton
    resultWalls1 = []
    resultWalls2 = []
    for wall1,wall2 in zip(levelS1.wallSkeletons,levelS2.wallSkeletons):
        rand = random.uniform(0,1)
        if rand < 0.5:
            resultWalls1.append(wall1)
            resultWalls2.append(wall2)
        else:
            resultWalls1.append(wall2)
            resultWalls2.append(wall1)

    s1 = Solution(LevelSkeleton(resultWalls1,levelS1.slabSkeleton,levelS1.level))
    s2 = Solution(LevelSkeleton(resultWalls2,levelS1.slabSkeleton,levelS1.level))
    return s1,s2