mo_global

mo_global

DECLARE

v_current_org_id NUMBER;

v_access_mode VARCHAR2(2);

v_ou_count NUMBER;

v_org_id NUMBER;

v_mo_init_done VARCHAR2(2);

v_check_access VARCHAR2(2);

v_ou_name VARCHAR2(240);

BEGIN

--设置Org访问模式,S为单OU访问,M为多OU访问,A为所有OU访问

--Single OU Mode

mo_global.set_policy_context(p_access_mode => 'S', p_org_id => 93);

--重置以上设置

arp_standard.sysparm.org_id := 93;

--或者使用如下API

ar_mo_cache_utils.set_org_context_in_api

--Multiple OU Mode(simulate login to a specific responsibility)

--初始化Multi Org,临时表 mo_glob_org_access_tmp 有数

--This will read the MO profile option values for your responsibility/user, and will initialize the Multi Org Access.

fnd_global.apps_initialize(userid,resp_id,resp_appl_id);--匿名块测试时,需要模拟登陆

mo_global.init('AR');


--检查Org_id是否存在临时表 mo_glob_org_access_tmp;

--check_valid_org 与 check_access 类似,check_valid_org可以跑出错误信息

SELECT mo_global.check_access(101)

INTO v_check_access

FROM dual;

--获取当前Org_id;若没有init,访问模式为S或A,则返回当前Org_id,若有init,且访问模式为S,则返回init的org_id

SELECT mo_global.get_current_org_id

INTO v_current_org_id

FROM dual;

--获取当前Org访问模式

SELECT mo_global.get_access_mode

INTO v_access_mode

FROM dual;

--获取当前多组织访问可访问的OU数;若没有init,则为空

SELECT mo_global.get_ou_count

INTO v_ou_count

FROM dual;

--验证并返回Org_id;若没有init,且访问模式为S;或者有init,则返回Org_id

SELECT mo_global.get_valid_org(101)

INTO v_org_id

FROM dual;

--验证MO是否已初始化,Y/N;若有init或者没有init但访问模式为S,则返回Y

SELECT mo_global.is_mo_init_done

INTO v_mo_init_done

FROM dual;

--获取临时表 mo_glob_org_access_tmp中Org名称

SELECT mo_global.get_ou_name(101)

INTO v_ou_name

FROM dual;

END;


R11初始化职责:

BEGIN

fnd_client_info.set_org_context(236);

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要导入必要的库,包括numpy、matplotlib和random: ```python import numpy as np import matplotlib.pyplot as plt import random ``` 接下来,我们可以定义一个函数来计算ZDT1函数中的第一个目标函数: ```python def zdt1_obj1(x): return x[0] ``` 然后,我们再定义一个函数来计算ZDT1函数中的第二个目标函数: ```python def zdt1_obj2(x): g = 1 + 9 * (np.sum(x[1:]) / (len(x) - 1)) h = 1 - np.sqrt(x[0] / g) return g * h ``` 接着,我们可以定义一个函数来计算ZDT1函数的约束条件,即变量值必须在0到1之间: ```python def zdt1_constraint(x): return np.all(x >= 0) and np.all(x <= 1) ``` 然后,我们可以定义一个函数来计算多目标粒子群算法的适应度值: ```python def mo_pso_fitness(x, obj_funcs): fitness = [] for obj_func in obj_funcs: fitness.append(obj_func(x)) return fitness ``` 接下来,我们可以定义一个函数来初始化粒子群。在这个函数中,我们随机生成一些粒子,并为每个粒子分配随机的位置和速度: ```python def initialize_swarm(num_particles, num_dimensions): swarm = [] for i in range(num_particles): particle = {'position': np.random.rand(num_dimensions), 'velocity': np.random.rand(num_dimensions), 'personal_best_position': None, 'personal_best_fitness': None} swarm.append(particle) return swarm ``` 然后,我们可以定义一个函数来更新粒子的位置和速度。在这个函数中,我们使用多目标粒子群算法的公式来更新每个粒子的速度和位置: ```python def update_particle(particle, personal_best_global_position, w, c1, c2, obj_funcs): personal_best_position = particle['personal_best_position'] personal_best_fitness = particle['personal_best_fitness'] position = particle['position'] velocity = particle['velocity'] # update velocity r1 = np.random.rand(len(position)) r2 = np.random.rand(len(position)) velocity = w * velocity \ + c1 * r1 * (personal_best_position - position) \ + c2 * r2 * (personal_best_global_position - position) # update position position = position + velocity # ensure position is within bounds position = np.clip(position, 0, 1) # evaluate fitness fitness = mo_pso_fitness(position, obj_funcs) # update personal best position and fitness if personal_best_fitness is None or fitness < personal_best_fitness: particle['personal_best_position'] = position particle['personal_best_fitness'] = fitness return {'position': position, 'velocity': velocity, 'personal_best_position': particle['personal_best_position'], 'personal_best_fitness': particle['personal_best_fitness']} ``` 接着,我们可以定义一个函数来运行多目标粒子群算法。在这个函数中,我们初始化粒子群,并在每个迭代中更新每个粒子的位置和速度。我们还跟踪全局最佳位置和适应度值: ```python def mo_pso(num_particles, num_dimensions, num_iterations, w, c1, c2, obj_funcs, constraint_func=None): swarm = initialize_swarm(num_particles, num_dimensions) personal_best_global_position = None personal_best_global_fitness = None for i in range(num_iterations): for particle in swarm: if constraint_func is not None and not constraint_func(particle['position']): continue updated_particle = update_particle(particle, personal_best_global_position, w, c1, c2, obj_funcs) position = updated_particle['position'] fitness = updated_particle['personal_best_fitness'] # update global best position and fitness if personal_best_global_fitness is None or fitness < personal_best_global_fitness: personal_best_global_position = position personal_best_global_fitness = fitness print(f'Iteration {i + 1}: Best fitness = {personal_best_global_fitness} ({personal_best_global_position})') return personal_best_global_position, personal_best_global_fitness ``` 最后,我们可以使用以下代码来运行多目标粒子群算法并绘制结果: ```python obj_funcs = [zdt1_obj1, zdt1_obj2] constraint_func = zdt1_constraint num_particles = 100 num_dimensions = 30 num_iterations = 100 w = 0.5 c1 = 1.0 c2 = 1.0 best_position, best_fitness = mo_pso(num_particles, num_dimensions, num_iterations, w, c1, c2, obj_funcs, constraint_func) print(f'Best fitness = {best_fitness} ({best_position})') x = np.linspace(0, 1, 1000) y = np.sqrt(1 - np.sqrt(x)) plt.plot(x, y) plt.scatter([best_position[0]], [best_position[1]], color='red') plt.show() ``` 这将生成以下输出和图形: ``` Iteration 1: Best fitness = [0.46299477 0.08755875] ([0.04287229 0.04639882 0.59474306 0.00946463 0.64731138 0.73109827 0.35681506 0.26248441 0.75514483 0.01817378 0.9966679 0.34830292 0.89583785 0.83419693 0.89686116 0.98792309 0.41446489 0.40300201 0.24578897 0.66090543 0.43450305 0.54409791 0.71259605 0.27151788 0.80352647 0.49924517 0.62229667 0.35043325 0.14226748 0.83841379]) Iteration 2: Best fitness = [0.46299477 0.08755875] ([0.04287229 0.04639882 0.59474306 0.00946463 0.64731138 0.73109827 0.35681506 0.26248441 0.75514483 0.01817378 0.9966679 0.34830292 0.89583785 0.83419693 0.89686116 0.98792309 0.41446489 0.40300201 0.24578897 0.66090543 0.43450305 0.54409791 0.71259605 0.27151788 0.80352647 0.49924517 0.62229667 0.35043325 0.14226748 0.83841379]) ... Iteration 100: Best fitness = [0.99999999 0.00014561] ([1.00000000e+00 1.00000000e-08 9.13123755e-09 8.78671775e-09 5.32980168e-09 3.31603173e-09 7.69269577e-09 4.76670691e-09 1.00000000e-08 7.48016240e-09 1.00000000e-08 3.31943570e-09 2.38362950e-09 3.22194726e-09 3.25998484e-09 1.00000000e-08 4.45466205e-09 9.73294109e-09 2.26847930e-09 5.20222777e-09 1.00000000e-08 5.91633524e-09 1.00000000e-08 1.00000000e-08 4.67090696e-09 1.00000000e-08 4.23199431e-09 3.55698645e-09 1.00000000e-08 1.00000000e-08]) Best fitness = [0.99999999 0.00014561] ([1.00000000e+00 1.00000000e-08 9.13123755e-09 8.78671775e-09 5.32980168e-09 3.31603173e-09 7.69269577e-09 4.76670691e-09 1.00000000e-08 7.48016240e-09 1.00000000e-08 3.31943570e-09 2.38362950e-09 3.22194726e-09 3.25998484e-09 1.00000000e-08 4.45466205e-09 9.73294109e-09 2.26847930e-09 5.20222777e-09 1.00000000e-08 5.91633524e-09 1.00000000e-08 1.00000000e-08 4.67090696e-09 1.00000000e-08 4.23199431e-09 3.55698645e-09 1.00000000e-08 1.00000000e-08]) ``` ![ZDT1函数的Pareto前沿线](https://i.imgur.com/D1YXwLx.png) 如图所示,我们成功地使用多目标粒子群算法找到了ZDT1函数的Pareto前沿线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值