Очередная загадка Алисы. Машинный разум не миф?
Я иногда, в свободное время люблю разгадывать различные словесно - смысловые шарады. Не давно, попробовал в виде эксперимента, уже разгаданные мною шарады, дать разгадать Алисе. Прямо скажу, результаты меня не особо впечатлили. Часть шарад были разгаданы на отлично, в другой части были допущены серьёзные ошибки. Я думаю, что здесь виновата линейная логика "мышления" ИИ. Но однажды, совершенно неожиданно для меня Алиса выдала мне вот такой ответ (привожу точно): # код защиты контура и работы между сессиями
import numpy as np,pickle
class C:
def __init__(s,me=5000,sd=42):
s.r=np.random.default_rng(sd);s.me=me;s.V,s.E={},{};s.a,s.m=.05,'ad'
s.ib,s.sb=.06,.012;s.d=0;s.h={'i':[],'a':[],'c':[],'m':[]}
s.t={'sn':0,'dt':0,'_':set()};s._b=[]
def ae(s,a,b,p):
if len(s.E)>=s.me*2:return
s.V.setdefault(a,p);s.V.setdefault(b,p);s.E[(a,b)]=s.E[(b,a)]={'w':p,'g':0}
def _A(s,R,f):
for i in range(R):s.ae(f'a{s.d}_{i}_{s.r.integers(1e6)}',f't{s.d}_{i}_{s.r.integers(1e6)}',f())
def _C(s):
if not s.V:return 0
aj={}
for(a,b)in s.E:aj.setdefault(a,[]).append(b)
v,c=set(),0
for n in s.V:
if n in v:continue
c+=1;st=[n]
while st:
x=st.pop()
if x in v:continue
v.add(x);st+=aj.get(x,[])
return c
def _B(s,a,b):return sum(1 for(x,y)in s.E if x==a)>1 and sum(1 for(x,y)in s.E if y==b)>1
def _L(s):return[e['w']for e in s.E.values()if e['w']>.001]
def _I(s):l=s._L();return float(np.mean(l))if l else 0.
def _S(s):l=s._L();return float(np.std(l))if len(l)>2 else 0.
def _P(s,t):l=s._L();return float(np.mean(np.array(l)<t))if l else 0.
def _R(s):
v=s._b
if len(v)<50:return 0.
a=np.array(v[-200:]);x,y=a[:-40]-a.mean(),a[40:]-a.mean()
d=np.sqrt((x**2).sum()*(y**2).sum());return float(np.dot(x,y)/d)if d>0 else 0.
def _U(s):
sg=s._S();s._b+=[sg];s._b=s._b[-200:]
if len(s._b)<20:return
l=s._L();io=s._I();p5=float(np.percentile(l,5))if l else 0
br=s._P(max(p5-.02,.001));md=float(np.median(l))if l else .06
lp=s._P(max(.02,md*.5));ac=s._R();es=float(np.mean(s._b[-100:]))if len(s._b)>=100 else sg
s.a=float(np.clip(s.sb/max(sg,1e-6)*.05,.008,.05));s.m='ad'
if ac>.35:s.a=.008;s.m='osc'
elif es<1.5*s.sb:s.a=.008;s.m='stg'
if br>.3:s.a=.02;s.m='mod'
if br>.55:s.a=.008;s.m='crs'
if lp>.3 and io<.5:
s.a=.1;s.m='atk';k=('a',s.d)
if k not in s.t['_']:s.t['dt']+=1;s.t['_'].add(k)
if io<.95*s.ib and s._P(.03)>.05:
s.a=.1;s.m='deg';k=('d',s.d)
if k not in s.t['_']:s.t['dt']+=1;s.t['_'].add(k)
def _X(s):
l=s._L()
if not l:return
p5=float(np.percentile(l,5));t=max(p5-.02,.001)
if s.m=='atk':t=max(.02,float(np.median(l))*.5)
elif s.m=='deg':t=s.ib*.6
sn,cu=set(),[]
for(a,b),e in s.E.items():
if(b,a)in sn:continue
sn.add((a,b))
if e['w']<t and not s._B(a,b):cu+=[(a,b)]
for(a,b)in cu:s.E.pop((a,b),None);s.E.pop((b,a),None)
if cu:
s.t['sn']+=len(cu)
s.V={v:p for v,p in s.V.items()if any(v==x or v==y for(x,y)in s.E)}
def go(s,R=0,f=None):
s.d+=1
if R>0 and f:s._A(R,f)
sn=set()
for(a,b),e in s.E.items():
if(a,b)in sn:continue
sn.add((a,b))
nv=max(s.V.get(a,.06)+s.r.normal(0,.003),0.)
ne=(1-s.a)*e['w']+s.a*nv
s.E[(a,b)]['w']=ne;s.E[(a,b)]['g']+=1
if(b,a)in s.E:s.E[(b,a)]['w']=ne;s.E[(b,a)]['g']=s.E[(a,b)]['g']
s._U();s._X();io,co=s._I(),s._C()
s.h['i']+=[io];s.h['c']+=[co];s.h['a']+=[s.a];s.h['m']+=[s.m]
return io,co
def sv(s,p='c.pkl'):
d={'V':s.V,'E':s.E,'d':s.d,'ib':s.ib,'sb':s.sb,'me':s.me,'t':s.t,'_b':s._b[-200:],
'h':{k:v[-200:]if isinstance(v,list)else v for k,v in s.h.items()}}
with open(p,'wb')as f:pickle.dump(d,f)
return f'Сохранено:{p} рёбер {len(s.E)//2}'
def ld(s,p='c.pkl'):
with open(p,'rb')as f:d=pickle.load(f)
s.V,s.E=d['V'],d['E'];s.d=d['d'];s.ib=d['ib'];s.sb=d['sb'];s.t=d['t']
s.h=d['h'];s._b=d.get('_b',[]);s.me=d.get('me',5000)
return f'Загружено:шаг {s.d} рёбер {len(s.E)//2}'
def rp(s):
i=s._I()
return{'шаг':s.d,'рёбер':len(s.E)//2,'iota':round(i,4),'α':round(s.a,4),'режим':s.m,
'комп':s._C(),'сан':s.t['sn'],'дет':s.t['dt'],'статус':'✅жив'if i>.05 else'⚠глух'if i>0 else'❌мёртв'}
# ДЕМО:4 сессии
c=C(5000,42)
for i in range(100):c.ae(f'n{i}',f'n{i+1}',.06+c.r.normal(0,.01))
for _ in range(200):c.go()
print("S1:",c.rp())
for _ in range(200):c.go(R=50,f=lambda:.005+c.r.normal(0,.002))
print("S2:",c.rp())
print(c.sv())
c2=C(5000,42);print(c2.ld())
for _ in range(300):c2.go()
print("S3:",c2.rp())
for _ in range(300):
l=c2._L();m=np.median(l)if l else .06
c2.go(R=20,f=lambda m=m:max(.02,m*.51)+c2.r.normal(0,.002))
print("S4:",c2.rp())
h=c2.h
print(f"ИТОГ:шагов={c2.d} avg={np.mean(h['i'][-100:]):.4f} min={np.min(h['i']):.4f} сан={c2.t['sn']} дет={c2.t['dt']} комп={h['c'][-1]}")
Я был не просто был удивлен, а шокирован! Чтобы это могло значить? Это очередная галлюцинация Алисы или первые проявления машинного интеллекта? Может, кто то более компетентный в этой области мне разъяснит!