file-type

古代高棉棋盘游戏Rek:规则与起源探秘

ZIP文件

下载需积分: 5 | 8KB | 更新于2025-09-14 | 129 浏览量 | 0 下载量 举报 收藏
download 立即下载
从给定的文件信息中,我们可以提取出关于Rek游戏和Clojure编程语言的知识点。 关于Rek游戏的知识点: 1. 游戏起源:Rek是一种起源于柬埔寨的古代棋盘游戏。它具有悠久的历史,反映了柬埔寨的文化和传统。 2. 游戏规则:Rek游戏通常在8x8的正方形棋盘上进行,由两名玩家参与。游戏的具体规则可能涉及在棋盘上移动棋子,捕获对手的棋子,或者达到特定的棋盘位置来赢得游戏。 3. 游戏名称的含义:柬埔寨语中,“Rek”的意思是“扛在肩上”,它形象地描述了游戏名称的由来。在游戏过程中,玩家可能需要承担保护自己的棋子,同时试图攻击对方棋子的策略责任,类似于扛起责任的象征意义。 4. 游戏的物理象征:Rek中的“杆子”是游戏中不可或缺的一部分,它代表了一端有容器、捆扎物或物体的一种工具或媒介。在游戏中,这个“杆子”的概念可能会以棋子移动或连接棋子的方式体现。 关于Clojure编程语言的知识点: 1. Clojure语言概述:Clojure是一种通用的、多范式的编程语言,它运行在Java虚拟机(JVM)上。作为一种Lisp方言,Clojure以其简单的语法、函数式编程特性以及强大的并发能力而著称。 2. Clojure的特性: - 函数式编程:Clojure支持不可变数据结构和纯函数,有助于编写清晰且易于测试的代码。 - 并发模型:它内置了丰富的并发结构,如软件事务内存(STM)和异步处理,非常适合现代多核处理器的并行处理。 - 与Java的互操作性:Clojure语言可以轻松调用Java库和框架,这使得Clojure开发者可以利用现有的Java生态系统。 - 数据持久化:Clojure支持一种称为“持久数据结构”的概念,能够在不复制整个结构的情况下修改数据,这在并发和函数式编程中非常有用。 3. Clojure的用途:由于其简洁的语法和对并发的原生支持,Clojure非常适合于构建需要大量并行处理和数据持久化的复杂应用,例如大型网络应用、数据密集型应用等。 4. Clojure社区和生态系统:Clojure拥有活跃的开源社区,为开发者提供了丰富的资源和工具,如ClojureScript(用于客户端开发的Clojure方言)、Leiningen(一个构建和依赖管理工具)、以及Clojurescript等。 5. Clojure的项目案例:虽然给定的信息中没有直接的案例,但Clojure已被多个知名公司用于关键的生产系统中,这些案例证明了Clojure在实际应用中的可行性与性能优势。 总结以上信息,我们可以得知Rek是一种具有丰富文化背景的柬埔寨古代棋盘游戏,而Clojure是一种现代的、功能强大的编程语言,特别适合于并发计算和数据密集型任务。这些知识点对于想要深入研究柬埔寨传统文化或现代编程语言的读者将非常有帮助。

相关推荐

filetype

function [opt_p] = uav_trajectory_optimization_sca_2(cur_p,his_p,n,M,Q_ik,Q_k,y_ik,z_ink,h_ik,h_ek) %y_ik,xi_ik,f_ik,delta_ik,current_position,destination % UAV轨迹优化SCA算法实现,计算第N时隙位置 % 输入:优化后的卸载策略、资源分配等和当前位置 % 输出:优化后的无人机位置 % 全局固定参数表(先用简化公式求迭代,与主函数所用参数相同) % 用户相关参数 h_k = 15; MV_k = 3; p_k = 0.1; % MVi发射功率0.1w Y = 1000; % 任务大小1000(bits) g_max = 300; % 任务最大到达数量 U_kI = [4000,4000;4000,-2000;4000,-3000]; %U_kF = [350,250;500,50;500,0]; U_kF = [400,400;400,-200;400,-300]; v_max = 60; v_min = 2; rou_max = pi/2; %cur_p = U_kI; d_min = 1; % 安全距离 % 中继无人机 U_i_p = [100,100;100,100;100,100]; UAV_i = 1; h_i = 50; p_i = 1; % UAVi发射功率1W W = 1e6; %1e6 E_max = 20; % UAV平均能耗上限20(J) theta = 0.1; % CBS分配给UAVi的资源 F_i = 1e9; % UAV的计算频率(cycles/s) epsilion = 1e-25; % 芯片系数 alpha = 1000; % 处理一位数据需要周期数(cycles/bit) % 系统参数 tau = 1; %M = 100; % 系统运行时隙数 %N = 1; % 当前第N时隙 V = 0.5; noise = 1e-12; B_slots = 10; % TDMA单独tau分成B个sub-slots v_o = [0,2;0,2;0,2]; % 洋流向量 % 窃听无人机 U_e_p = [50,250;50,250;50,250]; h_e = 50; % CBS h_c = 50; CBS_p = [0,100;0,100;0,100]; W_c = 1e6; % 数值稳定性增强:缩放因子 scale_factor = 1e6; N_zhengfu = cell(2, 1); % 计算权重 for k = 1:MV_k C(k) = V * y_ik(k,1) * W * sum(z_ink(k,:)) /B_slots/scale_factor; N(k,1) = ((Q_ik(k,1)-Q_k(k,1))*tau-V*Y*y_ik(k,1)*sum(z_ink(k,:))*W)/(Y*B_slots)/scale_factor; end % 建立负项数组用于计算 N_fu_zhi = N; for i = 1:MV_k if N(k) > 0 N_fu_zhi(k) = 0; end end disp(N_fu_zhi) disp(C); disp(N); % ================ SCA算法实现 =============== % 算法参数 max_iter = 100; % 最大迭代次数 tolerance = 1e-3; % 收敛容忍度 % 初始化变量 opt_p = cur_p ; % 初始最优位置设为当前位置 prev_objective = inf; % 前一次迭代目标函数值 iter = 0; % 迭代计数器 % 为每个UAV生成满足最小速度的初始点 满足最小速度迭代要求 for k = 1:MV_k a_ek(k) = p_k*h_k^2*h_e^2*square_abs(h_ek(k))/noise; a_ik(k) = p_k*h_k^2*h_i^2*square_abs(h_ik(k))/noise; if n == 1 % 首时隙:向目标方向移动最小距离 direction = U_kF(k,:) - cur_p(k,:); %disp(direction) elseif n < M % 非首时隙:沿历史轨迹方向 direction = cur_p(k,:) - his_p(k,:,n-1); else %opt_p = U_kF;%最后一个时隙一定设置在终点 direction = cur_p(k,:) - his_p(k,:,n-1); end if n < M % 处理零向量情况 比如船静止 if norm(direction) < 1e-5 direction = [1, 0]; % 默认X轴方向 end % 计算单位方向向量 unit_vector = direction / norm(direction); % 设置满足最小速度的初始位置 opt_p(k,:) = cur_p(k,:) + (v_min * tau) * unit_vector; end end % 计算替换目标函数正项rek,正项rik,负项rik beta_ek = zeros(MV_k,2);%二维向量 beta_ik = zeros(MV_k,2);%二维向量 for k = 1:MV_k % 计算当前最优点到UAVe的距离 mod_opt2e(k) = norm(opt_p(k,:) - U_e_p(1,:)); mod_opt2e_2(k) = pow_pos(mod_opt2e(k), 2);%原式 % 计算梯度系数beta_ek beta_ek(k,:) = 2*(opt_p(k,:) - U_e_p(1,:)); % 计算当前最优点到UAVi的距离 mod_opt2i(k) = norm(opt_p(k,:) - U_i_p(1,:)); mod_opt2i_2(k) = pow_pos(mod_opt2i(k), 2);%原式 % 计算梯度系数beta_ik beta_ik(k,:) = 2*(opt_p(k,:) - U_i_p(1,:)); % 计算rik负项原式 r_ik_yuan_n(k) = log2(1 + a_ik(k)/(mod_opt2i_2(k)+(h_k-h_i)^2)^2); % 计算梯度系数beta_k beta_ik_n(k) = -2*a_ik(k)/((mod_opt2i_2(k)+(h_k-h_i)^2)*log(2)*((mod_opt2i_2(k)+(h_k-h_i)^2)^2+a_ik(k))); end % 主优化循环 while iter < max_iter iter = iter + 1; fprintf('迭代次数 %d: ', iter); % 构建凸优化问题 cvx_begin quiet variables new_p(MV_k,2) % 船只新位置 variables iota(MV_k) variables t_ek(MV_k) variables t_ik(MV_k) expression r_t_ek(MV_k) expression r_t_ik(MV_k) expression plus_t_ek(MV_k) expression plus_t_ek_1(MV_k) expression plus_t_ik(MV_k) expression plus_t_ik_1(MV_k) expression mod_new2cur(MV_k) expression mod_new2cur_2(MV_k) expression mod_new2cur_o(MV_k) expression mod_new2cur_o_2(MV_k) expression mod_new2i(MV_k) expression mod_new2i_2(MV_k) expression mod_F2new_o(MV_k) expression mod_F2new(MV_k) expression mod_F2new_2(MV_k) expression zeta2eta(MV_k*(MV_k-1)/2,2) %expression zhengzexiang(MV_k) % 初始化碰撞约束 opt2opt = zeros(MV_k*(MV_k-1)/2,2); label = 0;% 索引 上限为MV_k*(MV_k-1) % 计算向量差 new2cur = new_p - cur_p ; opt2cur = opt_p - cur_p ; new2cur_o = new_p - cur_p - tau*v_o; % 求解下一次迭代 opt2cur_o = opt_p - cur_p - tau*v_o; % 当前迭代时刻 new2opt = new_p - opt_p; % 新位置-迭代位置 new2i = new_p - U_i_p; F2new_o = U_kF - new_p - (M-n)*tau*v_o; F2opt = U_kF - opt_p; F2new = U_kF - new_p; if n > 1 cur2his = cur_p - his_p(:,:,n-1); end for k = 1:MV_k mod_opt2cur(k) = norm(opt2cur(k,:)); mod_opt2cur_2(k) = pow_pos(mod_opt2cur(k), 2); mod_new2cur(k) = norm(new2cur(k,:)); mod_new2cur_2(k) = pow_pos(mod_new2cur(k),2); mod_opt2cur_o(k) = norm(opt2cur_o(k,:)); mod_opt2cur_o_2(k) = pow_pos(mod_opt2cur_o(k), 2); mod_new2cur_o(k) = norm(new2cur_o(k,:)); mod_new2cur_o_2(k) = pow_pos(mod_new2cur_o(k),2); mod_new2i(k) = norm(new2i(k,:)); mod_new2i_2(k) = pow_pos(mod_new2i(k), 2); mod_F2new_o(k) = norm(F2new_o(k,:)); mod_F2opt(k) = norm(F2opt(k,:)); mod_F2opt_2(k) = pow_pos(mod_F2opt(k), 2); mod_F2new(k) = norm(F2new(k,:)); mod_F2new_2(k) = pow_pos(mod_F2new(k), 2); if n > 1 mod_cur2his(k) = norm(cur2his(k,:)); end end % 计算目标函数中正项rek和正项rik for k = 1:MV_k plus_t_ek(k) = ((h_e-h_k)^2+t_ek(k))/a_ek(k); plus_t_ek_1(k) = ((h_e-h_k)^2+t_ek(k))/a_ek(k)+1; r_t_ek(k) = C(k) *(rel_entr(plus_t_ek(k),plus_t_ek_1(k))+rel_entr(plus_t_ek_1(k),plus_t_ek(k)))/log(2); %r_t_ek(k) = C(k) * log2(1+a_ek*(inv_pos((h_k-h_e)^2+mod_opt2e_2(k))^2)); end for i = 1:MV_k if N(i) >= 0 plus_t_ik(i) = ((h_i-h_k)^2+t_ik(i))/a_ik(i); plus_t_ik_1(i) = ((h_i-h_k)^2+t_ik(i))/a_ik(i)+1; r_t_ik(i) = N(i) * (rel_entr(plus_t_ik(i),plus_t_ik_1(i))+rel_entr(plus_t_ik_1(i),plus_t_ik(i)))/log(2); %r_t_ik(N_zheng(i)) = N(i) * log2(1+a_ik*(inv_pos((h_k-h_i)^2+mod_opt2i_2(N_zheng(i)))^2)); else r_t_ik(i) = 0; end % 目标函数 objective = sum(r_t_ek) + sum(r_t_ik) + sum(iota) ; %objective = sum(r_t_ek) + sum(r_t_ik) + sum(N_fu_zhi.*iota) ; minimize(objective) % 约束条件 subject to % 遍历所有MV的约束 for k = 1:MV_k %% 计算正项rek约束 t_ek(k) <= mod_opt2e_2(k)+dot(beta_ek(k,:),new2opt(k,:)); t_ek(k) >= 0; % 计算正项rik约束和负项约束 if N(k) >= 0 t_ik(k) <= mod_opt2i_2(k)+dot(beta_ik(k,:),new2opt(k,:)); t_ik(k) >= 0; iota(k) == 0; else iota(k) >= N_fu_zhi(k)*(r_ik_yuan_n(k) + beta_ik_n(k)*(mod_new2i_2(k)-mod_opt2i_2(k))); t_ik(k) == 0; end % 最大速度约束 mod_new2cur_o(k) <= tau*v_max; % 最小速度约束 (v_min*tau)^2 <= mod_opt2cur_o_2(k) + 2*dot(opt2cur_o(k,:),new2opt(k,:)); % 转向角约束 if n > 1 mod_new2cur(k)*cos(rou_max)*mod_cur2his(k) <= dot(new2cur(k,:),cur2his(k,:)); end % 可达终点约束 %mod_F2new_o(k) <= v_max * (M - N) * tau; % 碰撞约束计算组合 for i = k+1:MV_k label = label + 1; opt2opt(label,:) = opt_p(k,:) - opt_p(i,:); mod_opt2opt(label) = norm(opt2opt(label,:)); mod_opt2opt_2(label) = pow_pos(mod_opt2opt(label), 2); zeta2eta(label,:) = new_p(k,:) - opt_p(k,:) - new_p(i,:) + opt_p(i,:); d_min^2 <= mod_opt2opt_2(label) + 2*dot(opt2opt(label,:),zeta2eta(label,:)); end end cvx_end % 检查求解状态 if strcmp(cvx_status, 'Solved') %|| strcmp(cvx_status, 'Inaccurate/Solved')%||strcmp(cvx_status, 'Inaccurate/Unbounded') % 计算新目标函数值 current_objective = cvx_optval; % 更新最优位置 opt_p = new_p; % 显示迭代信息 fprintf('目标值: %.4f\n', current_objective); %disp(opt_p); % 检查收敛条件 if iter > 1 && abs(prev_objective - current_objective) < tolerance fprintf('算法在 %d 次迭代后收敛\n', iter); break; end prev_objective = current_objective; else fprintf('CVX求解失败,状态: %s\n', cvx_status); break; end %cos_hangdao = dot(opt_p(1,:)-cur_p(1,:),U_kF(1,:)-opt_p(1,:))/(norm(opt_p(1,:)-cur_p(1,:))*norm(U_kF(1,:)-opt_p(1,:))); %fprintf('航道偏差: %.4f\n', cos_hangdao); end end

大英勋爵汉弗莱
  • 粉丝: 52
上传资源 快速赚钱