예제 #1
0
def act_commit(env, socl_net, agent_no, agent, record, T, Tfi, new_plan,
               member):
    assert isinstance(env, Env) and isinstance(agent, Agent)
    assert isinstance(socl_net, SoclNet)
    assert isinstance(new_plan, Plan) and isinstance(record, Record)

    agent.policy_now = 'commit_f'  # 添加当前行动记录
    # 以owener的power为概率接受一个plan,如果是自身,概率为1
    p_comit = 1
    if new_plan.info['owner'] != agent_no:
        p_comit = socl_net.power[new_plan.info['owner']][agent_no]['weight']

    agent.renew_m_plan(new_plan, T + Tfi)

    if (p_comit > uniform(0, 1)):
        # P0-07 同上,覆盖计划前对原计划执行情况进行比较,并更新power
        if not agent.a_plan is None:
            dF = env.getValue(agent.state_now) \
                 - record.get_agent_record(agent_no, agent.a_plan.info['T_acpt'])["value"]
            # if "commit" in agent.a_plan.info and agent.a_plan.info['commit']:
            dp_f_a = new_plan.info['owner']
            dP_r = agent.agent_arg['dP_r']['other']
            # 仅对他人的power进行更新
            if dp_f_a != agent_no:
                dP = agent.agent_arg["dPower"](dF, dP_r)
                d_pwr_updt_g = agent.agent_arg["d_pwr_updt_g"](
                    socl_net.power[dp_f_a][agent_no]['weight'], dP)
                logging.debug("pwr change: from:%s,to:%s,dp:%.5s" %
                              (dp_f_a, agent_no, d_pwr_updt_g))
                socl_net.power_delta(dp_f_a, agent_no, d_pwr_updt_g)
                if d_pwr_updt_g < 0:  # 如果结果不好,还要扣关系分
                    d_re_updt_g = d_pwr_updt_g
                    socl_net.relat_delta(dp_f_a, agent_no, d_re_updt_g)
            else:
                dp_f_a = agent_no
                dP_r = agent.agent_arg['dP_r']['self']
            # dP = agent.agent_arg["dPower"](dF, dP_r)
            # d_pwr_updt_g = agent.agent_arg["d_pwr_updt_g"](socl_net.power[dp_f_a][agent_no]['weight'], dP)
            # socl_net.power_delta(dp_f_a, agent_no, d_pwr_updt_g)
        leadership_bill.leader_bill.add_record(record_type="m-plan",
                                               gen=new_plan.sign,
                                               user=Sign(
                                                   agent_no, T + Tfi,
                                                   'act_commit'))
        assert new_plan.area.sign is not None
        leadership_bill.leader_bill.add_record(record_type="m-info",
                                               gen=new_plan.area.sign,
                                               user=Sign(
                                                   agent_no, T + Tfi,
                                                   'act_commit'))
        agent.a_plan = deepcopy(new_plan)
        agent.a_plan.info['T_acpt'] = T + Tfi
        agent.a_plan.info['commit'] = True
        agent.a_plan.info['member'] = member
        agent.policy_now = 'commit_t'  # 添加当前行动记录
        commited = True
    else:
        commited = False
    logging.debug(agent.policy_now)
    return socl_net, agent, commited
예제 #2
0
def act_dyjs(env, socl_net, agent_no, agent, record, T, Tfi):
    assert isinstance(socl_net, SoclNet)
    global_arg = arg.init_global_arg()
    # 根据对自己影响的大小选择强化对象
    out_power = []
    agent.policy_now = 'dyjs_noaim'  # 添加当前行动记录
    for x in range(global_arg["Nagent"]):
        if x != agent_no:
            out_power.append(socl_net.power[x][agent_no]['weight'])
        elif x == agent_no:
            out_power.append(0)
    if max(out_power) > socl_net.arg['power_thld']:  # 对自己影响力大于一个阈值的人才会考虑定义角色
        to_power = random_choice(norm_softmax(out_power))
        for aim in range(global_arg['Nagent']):
            if aim != to_power:
                delta = env.arg['ACT']['dyjs']['delta_power'](
                    socl_net.power[to_power][aim]['weight'])
                socl_net.power_delta(to_power, aim, delta)
                leadership_bill.leader_bill.add_record(
                    record_type='talking',
                    meeting="dyjs",
                    talking_type="dyjs",
                    speaker=Sign(agent_no, T + Tfi, 'act_dyjs'),
                    listener=Sign(aim, T + Tfi, 'act_dyjs'))
        agent.policy_now = 'dyjs'  # 添加当前行动记录

    logging.debug(agent.policy_now)
    return socl_net, agent
예제 #3
0
def _meeting_req_add_bill_record(host, member, meeting_name, ti):
    for x in host:
        for y in member:
            if y not in host:
                leadership_bill.leader_bill.add_record(
                    record_type='talking',
                    meeting=meeting_name,
                    talking_type="meet_req",
                    speaker=Sign(x, ti - 1, "req"),
                    listener=Sign(y, ti, "req"))
예제 #4
0
def meeting_xtfg(env, agents, member, host, socl_net, record, T, Tfi):  # 协调分工
    assert isinstance(env, Env) and isinstance(socl_net, SoclNet)
    assert isinstance(host, set) and isinstance(member, set)
    assert host.issubset(member)

    _meeting_req_add_bill_record(host, member, "xtfg", T + Tfi)

    cent_weigh = socl_net.get_power_out_close_centrality()
    # cent_weigh = socl_net.get_power_out_degree_centrality()  # 改为od
    plan_pool = []
    # 获取所有host加权后的计划得分的比值
    for x in member:
        agents[x].meeting_now = 'xtfg'  # 添加当前行动记录

    for x in host:
        if not agents[x].a_plan is None:
            plan_v = env.arg['plan']['eval'](agents[x].a_plan.len_to_finish(
                agents[x].a_plan.area.center), agents[x].a_plan.goal_value)
            plan_pool.append({
                "id": x,
                "plan": agents[x].a_plan,
                "weight": cent_weigh[x] * plan_v
            })
    w_sum = sum([pair['weight'] for pair in plan_pool])
    sample_pool = [
        plan_pool[i]['weight'] / w_sum for i in range(len(plan_pool))
    ]

    for x in member:
        to_commit_pair = plan_pool[random_choice(sample_pool)]
        to_commit = to_commit_pair['plan']
        socl_net, agents[x], commited = acts.act_commit(
            env, socl_net, x, agents[x], record, T, Tfi, to_commit,
            member)  # 传入member,以便加入plan.info,后续执行时增强关系
        # socl_net,agents[x] = acts.act_commit(env, socl_net, x, agents[x],record, T, Tfi, to_commit)
        if commited:
            leadership_bill.leader_bill.add_record(
                record_type='talking',
                meeting="xtfg",
                talking_type="commit_plan",
                speaker=Sign(to_commit_pair['id'], T + Tfi, 'meeting_xtfg'),
                listener=Sign(x, T + Tfi, 'meeting_xtfg'))

    for u in member:
        for v in member:
            if u > v:
                socl_net.relat[u][v]['weight'] = agents[u].agent_arg[
                    're_incr_g'](socl_net.relat[u][v]['weight'])

    return agents, socl_net
예제 #5
0
def meeting_xxjl(env, agents, member, host, socl_net, record, T, Tfi):  # 信息交流
    assert isinstance(env, Env) and isinstance(socl_net, SoclNet)
    assert isinstance(host, set) and isinstance(member, set)
    assert host.issubset(member)

    _meeting_req_add_bill_record(host, member, "xxjl", T + Tfi)

    ret_info_pairs = []
    logging.debug("memeber:%s,host:%s" % (member, host))
    for x in member:
        logging.debug("agent%s meeting_now" % x)
        agents[x].meeting_now = 'xxjl'  # 添加当前行动记录

    for x in member:
        if not x in host:
            socl_net, agents[x] = acts.act_hqxx(env, socl_net, x, agents[x],
                                                record, T, Tfi)
    for x in member:
        ret_info_pairs.append({
            "agent_id":
            x,
            "info":
            agents[x].get_latest_m_info(env.arg['meeting']['xxjl']['last_p_t'],
                                        env.arg['meeting']['xxjl']['max_num'])
        })
    for x in member:
        for ret_info_pair in ret_info_pairs:
            y = ret_info_pair['agent_id']
            infos = ret_info_pair['info']
            if x == y or len(infos) < 1:
                continue
            agents[x].renew_m_info_list(infos, T + Tfi)
            max_info_max = max([_info.info['max'] for _info in infos])
            if max_info_max > env.getValue(agents[x].state_now):
                leadership_bill.leader_bill.add_record(
                    record_type='talking',
                    meeting='xxjl',
                    talking_type='get_useful_info',
                    speaker=Sign(y, T + Tfi, 'xxjl'),
                    listener=Sign(x, T + Tfi, 'xxjl'))

    for u in member:
        for v in member:
            if u > v:
                socl_net.relat[u][v]['weight'] = agents[u].agent_arg[
                    're_incr_g'](socl_net.relat[u][v]['weight'])

    return agents, socl_net
예제 #6
0
    def __init__(self):
        # 环境初始化
        self.global_arg = arg.init_global_arg()
        env_arg = arg.init_env_arg(self.global_arg)
        # 增加nk的一个读入操作
        self.main_env = Env(env_arg)
        for model_type in ['st', 'ed']:
            if all_config['checkpoint']['env'][model_type]['enable']:
                self.main_env.nkmodel_load(all_config['checkpoint']['env']['path'], model_type)
            self.main_env.nkmodel_save(all_config["nkmodel_path"][model_type], model_type)
        # 个体初始化
        self.agents = []
        csv_head_agent = ['agent_no'] + ['st_state'] + ['st_value'] + ['insight'] + ['xplr'] + ['xplt'] + ['enable']
        moniter.AppendToCsv(csv_head_agent, all_config['agent_csv_path'])
        for i in range(self.global_arg["Nagent"]):
            # 个体随机初始位置
            start_st_label = [randint(0, self.main_env.P - 1) for j in range(self.main_env.N)]
            state_start = State(start_st_label)
            self.agents.append(Agent(arg.init_agent_arg(self.global_arg,
                                                        self.main_env.arg),
                                     self.main_env))
            self.agents[i].state_now = deepcopy(state_start)
            self.agents[i].agent_id = i

            # 去除了一开始给一个全局area,改为添加一个包含起点的点area
            start_area = Area(self.agents[i].state_now, [False] * self.main_env.N, 0)
            start_area.info = get_area_sample_distr(env=self.main_env, area=start_area, state=self.agents[i].state_now,
                                                    T_stmp=0, sample_num=1, dfs_r=1)
            start_area.sign = Sign(i, 0, 'start')
            self.agents[i].renew_m_info(start_area, 0)
            self.a_plan = None
            logging.info("state:%s, st_value:%s,insight:%.5s ,xplr:%.5s, xplt:%.5s, enable:%.5s" % (
                str(self.agents[i].state_now),
                self.main_env.getValue(self.agents[i].state_now, 0),
                self.agents[i].agent_arg['a']['insight'],
                self.agents[i].agent_arg['a']['xplr'],
                self.agents[i].agent_arg['a']['xplt'],
                self.agents[i].agent_arg['a']['enable']))
            # 记录agent信息
            csv_info_agent = ['agent%d' % i] \
                             + [self.agents[i].state_now] \
                             + [self.main_env.getValue(self.agents[i].state_now, 0)] \
                             + [self.agents[i].agent_arg['a']['insight']] \
                             + [self.agents[i].agent_arg['a']['xplr']] \
                             + [self.agents[i].agent_arg['a']['xplt']] \
                             + [self.agents[i].agent_arg['a']['enable']]
            moniter.AppendToCsv(csv_info_agent, all_config['agent_csv_path'])

        # 社会网络初始化
        soclnet_arg = arg.init_soclnet_arg(self.global_arg, env_arg)
        self.socl_net = SoclNet(soclnet_arg)
        self.socl_net.new_flat_init()  # 修改初始化方法
        # self.socl_net.flat_init()
        if all_config['checkpoint']['socl_network']['enable']:
            self.socl_net.power_load(all_config['checkpoint']['socl_network']['power'])
            self.socl_net.relat_load(all_config['checkpoint']['socl_network']['relat'])
        self.record = Record()

        self.metric = metrics.register_all_metrics(metrics.Metrics())
예제 #7
0
def meeting_tljc(env, agents, member, host, socl_net, record, T, Tfi):  # 讨论决策
    assert isinstance(member, set) and isinstance(host, set)
    assert host.issubset(member)
    assert isinstance(agents[0], Agent)

    _meeting_req_add_bill_record(host, member, "tljc", T + Tfi)

    # host的max_area中,最好的区域用于制定计划
    all_max_area = [agents[x].get_max_area() for x in host]
    max_area = max(all_max_area, key=lambda a: a.info['max'])

    for x in member:
        agents[x].meeting_now = 'tljc'  # 添加当前行动记录

    new_plans = []
    for x in member:
        new_plans.append(acts._act_jhnd_get_plan(env, agents[x], max_area))
        new_plans[-1].info['owner'] = x
        new_plans[-1].info['T_gen'] = T + Tfi
        new_plans[-1].sign = Sign(x, T + Tfi, 'tljc')
    for x in member:
        agents[x].renew_m_plan_list(new_plans, T + Tfi)
    fin_plan = max(new_plans,
                   key=lambda plan: plan.goal_value)  # 仅根据goal_value排序,不考虑距离

    for x in member:
        socl_net, agents[x], use_plan = acts.act_jhjc(env, socl_net, x,
                                                      agents[x], record, T,
                                                      Tfi, fin_plan)
        if use_plan:
            for h in host:
                leadership_bill.leader_bill.add_record(
                    record_type='talking',
                    meeting='tljc',
                    talking_type='get_a_plan',
                    speaker=Sign(h, T + Tfi, 'tljc'),
                    listener=Sign(x, T + Tfi, 'tljc'))

    for u in member:
        for v in member:
            if u > v:
                socl_net.relat[u][v]['weight'] = agents[u].agent_arg[
                    're_incr_g'](socl_net.relat[u][v]['weight'])

    return agents, socl_net
예제 #8
0
def act_whlj(env, socl_net, agent_no, agent, record, T, Tfi):
    assert isinstance(socl_net, SoclNet)
    global_arg = arg.init_global_arg()
    to_select = [x for x in range(global_arg['Nagent'])]
    del to_select[agent_no]
    to_whlj = sample(to_select, env.arg['ACT']['whlj']['k'])
    for aim in to_whlj:
        delta = env.arg['ACT']['whlj']['delta_relate'](
            socl_net.relat[aim][agent_no]['weight'])
        socl_net.relat_delta(aim, agent_no, delta)
        leadership_bill.leader_bill.add_record(
            record_type='talking',
            meeting="whlj",
            talking_type="whlj",
            speaker=Sign(agent_no, T + Tfi, 'act_whlj'),
            listener=Sign(aim, T + Tfi, 'act_whlj'))

    agent.policy_now = 'whlj'  # 添加当前行动记录
    logging.debug(agent.policy_now)
    return socl_net, agent
예제 #9
0
def act_jhnd(env, socl_net, agent_no, agent, record, T, Tfi):  # 计划拟定
    assert isinstance(env, Env) and isinstance(agent, Agent)
    max_area = agent.get_max_area(
    )  # TODO WARNING 有可能get一个到达过的局部最优点,不停生成回到这个点的计划
    new_plan = _act_jhnd_get_plan(env, agent, max_area)
    new_plan.sign = Sign(agent_no, T + Tfi, 'act_jhnd')
    new_plan.info['owner'] = agent_no
    new_plan.info['T_gen'] = T + Tfi
    agent.renew_m_plan(new_plan, Tfi)
    socl_net, agent, use_plan = act_jhjc(env, socl_net, agent_no, agent,
                                         record, T, Tfi, new_plan)
    return socl_net, agent
예제 #10
0
def act_jhzx(env, socl_net, agent_no, agent, record, T, Tfi):  # 计划执行
    assert isinstance(agent.a_plan, Plan)
    # 已经完成原地不动,在area上,向goal移动,在area外向area中心点移动
    agent.state_now = agent.a_plan.next_step(agent.state_now)

    # 将现有的点作为一个区域保存
    new_area = Area(agent.state_now, [False] * env.N, 0)
    new_area.info = get_area_sample_distr(env=env,
                                          area=new_area,
                                          state=agent.state_now,
                                          T_stmp=T + Tfi,
                                          sample_num=1,
                                          dfs_r=1)
    # NOTE cid 删除OB扰动,实际到达的点应该给一个客观值
    # for k in new_area.info:
    #    new_area.info[k] = agent.agent_arg['ob'](new_area.info[k])
    new_area.sign = Sign(agent_no, T + Tfi, "act_jhzx")
    agent.renew_m_info(new_area, T + Tfi)
    # 添加当前行动记录
    agent.policy_now = 'jhzx'
    # 计划执行完毕后,清空计划
    if agent.a_plan.is_arrive(agent.state_now):
        #  NOTE cid 添加了清空计划前对计划的评价
        if agent.a_plan is not None:
            dF = env.getValue(agent.state_now) \
                 - record.get_agent_record(agent_no, agent.a_plan.info['T_acpt'])["value"]
            # if "commit" in agent.a_plan.info and agent.a_plan.info['commit']:  # 意味着来自tljc的plan就不更新了?
            dp_f_a = agent.a_plan.info['owner']
            dP_r = agent.agent_arg['dP_r']['other']
            # 仅对他人的power进行更新
            if dp_f_a != agent_no:
                dP = agent.agent_arg["dPower"](dF, dP_r)
                d_pwr_updt_g = agent.agent_arg["d_pwr_updt_g"](
                    socl_net.power[dp_f_a][agent_no]['weight'], dP)
                logging.debug("pwr change: from:%s,to:%s,dp:%.5s" %
                              (dp_f_a, agent_no, d_pwr_updt_g))
                socl_net.power_delta(dp_f_a, agent_no, d_pwr_updt_g)
                if d_pwr_updt_g < 0:  # 如果结果不好,还要扣关系分
                    d_re_updt_g = d_pwr_updt_g
                    socl_net.relat_delta(dp_f_a, agent_no, d_re_updt_g)
            else:
                dp_f_a = agent_no
                dP_r = agent.agent_arg['dP_r']['self']

        agent.policy_now = 'jhzx_fin'

        agent.a_plan = None

    logging.debug(agent.policy_now)
    return socl_net, agent
예제 #11
0
def act_hqxx(env, socl_net, agent_no, agent, record, T, Tfi):  # 获取信息
    assert isinstance(env, Env) and isinstance(agent, Agent)
    mask_t_id = sample(range(
        env.N), env.arg["ACT"]["hqxx"]["mask_n"])  # 随机从N个位点中选择mask_n的位允许修改
    mask_t = [False for i in range(env.N)]
    for i in mask_t_id:
        mask_t[i] = True

    jump_d = env.arg['ACT']['hqxx']['dist']
    state_t = agent.state_now

    # 寻找一个包含当前节点的区域的中心,记为state_t
    for i in range(jump_d):
        state_t = state_t.walk(sample(mask_t_id, 1)[0], sample([-1, 1], 1)[0])

    # 生成一个区域
    new_area = Area(state_t, mask_t, env.arg['ACT']['hqxx']['dist'])

    # 从区域中取样,获取信息,目前支持Max,Min,Avg,Mid,p0.15,p0.85
    new_area.info = get_area_sample_distr(
        env=env,
        area=new_area,
        T_stmp=T + Tfi,
        state=agent.state_now,
        sample_num=env.arg['ACT']['hqxx']['sample_n'],
        dfs_r=env.arg['ACT']['hqxx']['dfs_p'])

    # 加ob扰动
    for k in new_area.info:
        new_area.info[k] = agent.agent_arg['ob'](new_area.info[k])

    # 把信息更新到状态中
    new_area.sign = Sign(agent_no, T + Tfi, 'act_hqxx')
    agent.renew_m_info(new_area, T + Tfi)
    logging.debug(len(agent.frame_arg['PSM']['m-info']))
    agent.policy_now = 'hqxx'  # 添加当前行动记录
    logging.debug(agent.policy_now)
    return socl_net, agent
예제 #12
0
def act_zyzx(env, socl_net, agent_no, agent, record, T, Tfi):
    global_area = Area(agent.state_now, [True] * env.N,
                       env.P // 2 * env.N)  # 自由执行自带从global_area找下一个点
    state_next = global_area.rand_walk(agent.state_now)
    value_now = env.getValue(agent.state_now, T)
    value_next = env.arg['ACT']['zyzx']['ob'](env.getValue(
        state_next, T))  # 改为所有人是一样的ob影响参数
    # agent.agent_arg['ob'](env.getValue(state_next, T))

    dE = value_next - value_now
    kT0 = env.arg['ACT']['xdzx']['kT0']

    cd = env.arg['ACT']['xdzx']['cool_down']
    # cd = env.arg['ACT']['xdzx']['cool_down'] ** (env.arg['P'] ** (env.arg['N'] - inter_area_mskn))
    # 随着时间推移,容忍度越来越低 按stage来衰减
    cd_T = T
    tol = kT0 * cd**cd_T  # 容忍度
    # logging.debug("tol:{}".format(tol))

    if (dE >= 0 or (tol >= 1e-10 and exp(dE / tol) > uniform(0, 1))):
        agent.state_now = state_next
        new_area = Area(agent.state_now, [False] * env.N, 0)
        new_area.info = get_area_sample_distr(env=env,
                                              area=new_area,
                                              state=agent.state_now,
                                              T_stmp=T + Tfi,
                                              sample_num=1,
                                              dfs_r=1)
        new_area.sign = Sign(agent_no, T + Tfi, "act_zyzx")
        # NOTE cid 删除OB扰动,实际到达的点应该给一个客观值
        # for k in new_area.info:
        #   new_area.info[k] = agent.agent_arg['ob'](new_area.info[k])
        agent.renew_m_info(new_area, T + Tfi)

    agent.policy_now = 'zyzx'  # 添加当前行动记录
    logging.debug(agent.policy_now)
    return socl_net, agent
예제 #13
0
def act_jhjc(env, socl_net, agent_no, agent, record, T, Tfi, new_plan):
    assert isinstance(env, Env) and isinstance(agent, Agent)
    assert isinstance(record, Record) and isinstance(socl_net, SoclNet)
    new_plan_value = env.arg['ACT']['jhjc']["plan_eval"](
        new_plan.len_to_finish(agent.state_now), new_plan.goal_value)
    org_plan_value = env.getValue(
        agent.state_now)  # 如果没有a_plan,至少以当前位置作为plan value
    if agent.a_plan is not None:
        org_plan_value = env.arg['ACT']['jhjc']["plan_eval"](
            agent.a_plan.len_to_finish(agent.state_now),
            agent.a_plan.goal_value)

    agent.policy_now = 'jhjc_old'  # 添加当前行动记录,维持老计划
    # logging.debug("new_v: %.5s, org_v:%.5s" % (new_plan_value, org_plan_value))
    if new_plan_value >= org_plan_value:
        # P0-07 在覆盖新计划前对旧计划的执行情况进行判断并据此更新SoclNet.power
        if agent.a_plan is not None:
            dF = env.getValue(agent.state_now) \
                 - record.get_agent_record(agent_no, agent.a_plan.info['T_acpt'])["value"]
            # if "commit" in agent.a_plan.info and agent.a_plan.info['commit']:
            dp_f_a = new_plan.info['owner']
            dP_r = agent.agent_arg['dP_r']['other']
            # 仅对他人的power进行更新
            if dp_f_a != agent_no:
                dP = agent.agent_arg["dPower"](dF, dP_r)
                d_pwr_updt_g = agent.agent_arg["d_pwr_updt_g"](
                    socl_net.power[dp_f_a][agent_no]['weight'], dP)
                logging.debug("pwr change: from:%s,to:%s,dp:%.5s" %
                              (dp_f_a, agent_no, d_pwr_updt_g))
                socl_net.power_delta(dp_f_a, agent_no, d_pwr_updt_g)
                if d_pwr_updt_g < 0:  # 如果结果不好,还要扣关系分
                    d_re_updt_g = d_pwr_updt_g
                    socl_net.relat_delta(dp_f_a, agent_no, d_re_updt_g)
            else:
                dp_f_a = agent_no
                dP_r = agent.agent_arg['dP_r']['self']
            # dP = agent.agent_arg["dPower"](dF, dP_r)
            # d_pwr_updt_g = agent.agent_arg["d_pwr_updt_g"](socl_net.power[dp_f_a][agent_no]['weight'], dP)
            # socl_net.power_delta(dp_f_a, agent_no, d_pwr_updt_g)
        new_plan.info['T_acpt'] = T + Tfi
        agent.a_plan = new_plan

        assert new_plan.area.sign is not None

        leadership_bill.leader_bill.add_record(record_type="m-plan",
                                               gen=new_plan.sign,
                                               user=Sign(
                                                   agent_no, T + Tfi,
                                                   'act_jhjc'))
        leadership_bill.leader_bill.add_record(record_type="m-info",
                                               gen=new_plan.area.sign,
                                               user=Sign(
                                                   agent_no, T + Tfi,
                                                   'act_jhjc'))
        logging.debug("plan_dist: %s" %
                      agent.a_plan.len_to_finish(agent.state_now))
        agent.policy_now = 'jhjc_new'  # 添加当前行动记录,选择新计划
        use_plan = True
    else:
        use_plan = False
    logging.debug(agent.policy_now)
    return socl_net, agent, use_plan