You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整多层循环使A、Vav、Alpha输出符合预期的数组大小?

问题分析

你当前的数组都在全局作用域初始化,所有循环迭代都会向同一个数组追加数据,因此最终长度是所有外层循环次数的乘积,不符合层级输出要求。

调整方案

根据你需要的数组长度,把不同数组的初始化位置移动到对应上层循环的内部,每次进入对应层级时清空数组,仅存储当前层级的输出:

  • A要求长度为t:对应单次重复实验的t个时间步输出,将A的初始化放在crep循环内部、时间步tc循环外部
  • Vav要求长度为r:对应单个M值下r次重复实验的均值输出,将V的初始化放在M循环内部、crep循环外部
  • Alpha要求长度为MM:对应单个N下MM个M值的输出,将Alpha的初始化放在agentcount循环内部、M循环外部
修正后代码

同时修复了原代码中硬编码reshape维度、索引越界、逻辑判断错误的问题:

import numpy as np
An=np.array([51,101,201,301,501])#No. agents
t=10#time steps
MM=3#agent memory
r=5#repetitions

for agentcount in np.arange(0,5): #count over agents
    N=An[agentcount]
    Alpha = np.array([]) # 每个N对应一个长度为MM的Alpha
    
    for M in np.arange(1,MM+1):
        V = np.array([]) # 每个M对应一个长度为r的V
        Vav = np.array([]) # 每个M对应一个长度为r的Vav
        
        for crep in np.arange(1,r+1): 
            A = np.array([]) # 每个crep对应一个长度为t的A
            win=(np.random.rand(M,1)>0.5).astype(int) #winning record 
            s1=(np.random.rand(2**M,N)>0.5).astype(int) #random strat
            s2=(np.random.rand((2**M),N)>0.5).astype(int) #alternative 
            payout=np.zeros([2,N])#empty payout record
            
            for tc in np.arange(1,t+1):
                cc=np.abs((1+ np.dot((2**(np.arange(0,M))),win)))
                nex1=s1[cc-1,:].reshape(N) # 修正硬编码维度问题
                nex2=s2[cc-1,:].reshape(N)
                nexts=np.stack((nex1,nex2),axis=0)
                
                # 去掉冗余的cn循环,直接用payout的均值判断最优策略
                if payout[0].mean() > payout[1].mean():
                    Next = nex1
                else:
                    Next = nex2
                    
                Asum=np.sum(Next)/N
                A=np.append(A,Asum)
                winning=(Asum<0.5).astype(int) # 修正用整个A数组判断的逻辑错误
                payout=payout+(nexts==winning)#update record
            
            V=np.append(V,np.var(A))
            Vav=np.append(Vav,np.mean(V))
        
        Alpha=np.append(Alpha,2**M/N)
    
    # 此处可打印/存储当前N对应的三个数组结果
    print(f"N={N}时,A长度:{len(A)},Vav长度:{len(Vav)},Alpha长度:{len(Alpha)}")

如果不需要遍历不同的代理数量N,可直接去掉最外层的agentcount循环,固定N为你需要的值即可。


内容的提问来源于stack exchange,提问作者Jake2407

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:36:04