Задать вопрос
@Le_gorro
Я начинающий программист.

Что делать если класс превращается в список?

iw-Преобразует строку в число если не получится преобразовать выведет "?"

pousk-ищет в файле given данные для работы (при проверки создайте файл given и в этом файле должно быть это"(<20 10><1>) (<10 10><0>)")

cbh-Создаёт нейросети в переменную Bot
cb-Подготавливает задачи
rw-Изменяет случайный вес всем нейросетями
unn-используют нейросети
sp-Подсчёт очков
cit-обновление задачи
tp-запускает подготовку нейросетей

Во время работы с unn в переменой Bot на позиции 1 пропадает класс и появляется цикл, если я пропускаю позицию 1 то пропадает класс на позициях 1 и 2, но позиция 0 работает нормально, что делать?

Код:
def iw(d="",intt=True,munus=True):#преоброзователь чисел
    try:
        if intt:d=int(d)
        else:d=float(d)
    except:
        Rom=""
        plus=True
        totka=False
        d=str(d)
        for i in d:
            if i in list("0123456789-_.,"):
                if i in ["-","_"]:
                    if munus:plus=False
                elif i in [",","."]:
                    if not totka:Rom+="."
                    totka=False
                else:Rom+=i
        try:
            if intt:d=int(d)
            else:d=float(d)
            if not plus:Rom*=-1
        except:return "?"
        return Rom
    return d

def pousk(fn):
    Otvet=[]#Ответ
    pavensta=False #Знаки (<)
    psk="вход" #Поиск (вход,выход)
    list1=""#вход
    list2=""#выход
    peple=False #Поиск даных
    infoh=[]#Помощь по переменым
    a=""
    for i in fn:
        if i=="(":peple=True
        elif i==")":
            list1=list1.split()
            for i in range(len(list1)):list1[i]=iw(list1[i],False,True)

            list2=list2.split()
            for i in range(len(list2)):list2[i]=iw(list2[i],False,True)

            Otvet+=[[list1,list2]]
            Otvet=[]#Ответ
            pavensta=False #Знаки (<)
            psk="вход" #Поиск (вход,выход)
            list1=""#вход
            list2=""#выход
            peple=False #Поиск даных
            infoh=[]#Помощь по переменым
            a=""
        elif peple:
            if i=="<":pavensta=True
            elif i==">":
                pavensta=False
                if psk=="вход":psk="выход"
            elif psk=="вход":list1+=i
            elif psk=="выход":list2+=i
    return Otvet

import random as r

class Neo:
    id=[]#Варианты входных даных
    idc=[1]#Выходные даные сейчас
    ta=[]#Правильный ответ
    nn=[2,3,1]#количество неиронов
    os=False#Добавить неирон 1
    nb=100 #Количество ботов
    epoch=0 #Сколько эпох прошло

    top=[0,99999,0]#топ ботов(Веса,Очки,позиция)
    Bot=[]#Неиросети

    def cbh():#создание неиросети
        for u in range(Neo.nb):
            Neo.Bot[u].pos=u
            Neo.Bot[u].score=0#Очки бота
            Neo.Bot[u].decision=[]#Ответ неиросети

            w=[]#веса
            for i in range(len(Neo.nn)-1):
                q=[]
                l=0
                if Neo.os:l=1
                for e in range(Neo.nn[i+1]):
                    y=[]
                    for t in range(Neo.nn[i]+l):
                        y+=[r.randint(-2000,2000)/1000]
                    q+=[y]
                w+=[q]
            Neo.Bot[u].w=w

    def cb():#Подготовка ботов и задачи
        print("Создания ботов\n")
        with open('given.txt', 'r', encoding='utf-8') as f:
            Neo.id=pousk(*f)
        Neo.cit()
        for i in range(Neo.nb):Neo.Bot+=[Neo()]
        Neo.cbh()

    def rw(): #измена случайного веса всем
        print("Изменения случайного веса\n")
        for q in range(Neo.nb):
            if q!=Neo.top[2]:
                Neo.Bot[q]=Neo.top[0]
                for i in range(1):
                    a=r.randint(0,len(Neo.nn)-2)
                    q=r.randint(0,Neo.nn[a]-1)
                    e=r.randint(0,Neo.nn[q]-1)
                    Neo.Bot[q].w[a][q][e]=r.randint(-2000,2000)/1000

    def unn():#Использование неиросетей
        print("Использование неиросетей")
        for t in range(Neo.nb):
            memoru=[]
            for i in range(max(Neo.nn)):memoru+=[0]
            for i in range(len(Neo.nn)-1):
                l=0
                if Neo.os:l=1
                for e in range(Neo.nn[i+1]):
                    y=0
                    for r in range(Neo.nn[i]+l):
                        if r==Neo.nn[i]+l-1 and Neo.os:g=1
                        else:g=Neo.idc[r-1]
                        if i==0:y+=g*Neo.Bot[t].w[i][e][r]
                        else:y+=memoru[r]*Neo.Bot[t].w[i][e][r]
                    memoru[e]=y
            Neo.Bot[t].decision=memoru

    def sp():#Подсчёт очков
        print("Подсчёт очков")
        for q in range(Neo.nb):
            h=0
            for i in range(Neo.nn[-1]):
                h=Neo.Bot[i].decision[i]-Neo.idc[i]
                if h<0:h*=-1
                Neo.Bot[i].score+=h

            if Neo.Bot[i].score<Neo.top[1]:
                Neo.top[0]=Neo.Bot[i].w
                Neo.top[1]=Neo.Bot[i].score
                Neo.top[2]=Neo.Bot[i].pos

    def cit():#Обновление задачи
        h=r.choice(Neo.id)
        Neo.idc,Neo.ta=h[0],h[1]

    def tb():#учение ботов
        Neo.cb()
        while True:
            print("Век",Neo.epoch)
            print("Веса лучшего бота:",Neo.top[0])
            print("Очки лучшего бота:",Neo.top[1])
            input()
            Neo.unn()
            Neo.sp()
            Neo.rw()
            Neo.cit()
            Neo.epoch+=1

Neo.tb()
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы