Python和CUDA(C++)量子退火和伊辛二次算法模型

🎯要点

  1. 简化量子退火或离散优化算法处理,使用张量网络模拟和动态系统方法及神经网络逼近。
  2. 实现并行退火算法和CUDA支持下穷举搜索法。
  3. 使用大都会算法模拟二维自旋玻璃伊辛模型并测量磁化率、比热容和能量。
  4. 对比其他组合优化解方法,使用英伟达A100 GPU测试。

🍁自旋玻璃退火算法

在这里插入图片描述

🍪语言内容分比

在这里插入图片描述
在这里插入图片描述

🍇Python伊辛模型

伊辛模型(或伦茨-伊辛模型)以物理学家恩斯特·伊辛和威廉·伦茨的名字命名,是统计力学中铁磁性的数学模型。该模型由离散变量组成,这些变量表示原子“自旋”的磁偶极矩,可以处于两种状态之一(1 或 −1)。自旋排列成一个图形,通常是晶格(其中局部结构在所有方向上周期性重复),允许每个自旋与其邻居相互作用。相邻的一致自旋的能量低于不一致的自旋;系统趋向于最低能量,但热量会干扰这种趋势,从而产生不同结构相的可能性。该模型允许将相变识别为现实的简化模型。二维方晶格伊辛模型是显示相变的最简单的统计模型之一。

考虑一组 Λ \Lambda Λ 个晶格点,每个点都有一组相邻点(例如一个图)形成一个 d d d 维晶格。对于每个晶格点 k ∈ Λ k \in \Lambda kΛ,都有一个离散变量 σ k \sigma_k σk,使得 σ k ∈ { − 1 , + 1 } \sigma_k \in\{-1,+1\} σk{1,+1},表示点的自旋。自旋配置 σ = { σ k } k ∈ Λ \sigma=\left\{\sigma_k\right\}_{k \in \Lambda} σ={σk}kΛ 是每个晶格点的自旋值分配。对于任何两个相邻位置 i , j ∈ Λ i, j \in \Lambda i,jΛ,存在相互作用 J i j J_{i j} Jij。此外,位置 j ∈ Λ j \in \Lambda jΛ 有一个外部磁场 h j h_j hj 与其相互作用。配置 σ \sigma σ 的能量由哈密顿函数给出:
H ( σ ) = − ∑ ⟨ i j ⟩ J i j σ i σ j − μ ∑ j h j σ j H(\sigma)=-\sum_{\langle i j\rangle} J_{i j} \sigma_i \sigma_j-\mu \sum_j h_j \sigma_j H(σ)=ijJijσiσjμjhjσj
其中第一个和是对相邻自旋对的和(每对都计算一次)。符号 ⟨ i j ⟩ \langle i j\rangle ij 表示位置 i i i j j j 是最近的邻居。磁矩由 μ \mu μ 给出。请注意,上面哈密顿量的第二项中的符号实际上应该是正的,因为电子的磁矩与其自旋反向平行,但通常使用负项。配置概率由温度倒数为 β ≥ 0 \beta \geq 0 β0 的玻尔兹曼分布给出:
P β ( σ ) = e − β H ( σ ) Z β P_\beta(\sigma)=\frac{e^{-\beta H(\sigma)}}{Z_\beta} Pβ(σ)=ZβeβH(σ)
其中 β = 1 / ( k B T ) \beta=1 /\left(k_{ B } T\right) β=1/(kBT),归一化常数
Z β = ∑ σ e − β H ( σ ) Z_\beta=\sum_\sigma e^{-\beta H(\sigma)} Zβ=σeβH(σ)
是配分函数。对于自旋函数 f f f(“可观测”),我们表示为
⟨ f ⟩ β = ∑ σ f ( σ ) P β ( σ ) \langle f\rangle_\beta=\sum_\sigma f(\sigma) P_\beta(\sigma) fβ=σf(σ)Pβ(σ)
f f f 的期望(均值)。

配置概率 P β ( σ ) P_\beta(\sigma) Pβ(σ) 表示系统(在平衡状态下)处于配置 σ \sigma σ 状态的概率。

二维模型模拟

import numpy as np
from numpy.random import rand
import matplotlib.pyplot as plt
def initialstate(N):   state = 2*np.random.randint(2, size=(N,N))-1return statedef mcmove(config, beta):for i in range(N):for j in range(N):a = np.random.randint(0, N)b = np.random.randint(0, N)s =  config[a, b]nb = config[(a+1)%N,b] + config[a,(b+1)%N] + config[(a-1)%N,b] + config[a,(b-1)%N]cost = 2*s*nbif cost < 0:s *= -1elif rand() < np.exp(-cost*beta):s *= -1config[a, b] = sreturn configdef calcEnergy(config):energy = 0for i in range(len(config)):for j in range(len(config)):S = config[i,j]nb = config[(i+1)%N, j] + config[i,(j+1)%N] + config[(i-1)%N, j] + config[i,(j-1)%N]energy += -nb*Sreturn energy/4.def calcMag(config):mag = np.sum(config)return mag

更改这些参数以实现更小(更快)的模拟

nt      = 88         
N       = 16         
eqSteps = 1024       
mcSteps = 1024       T       = np.linspace(1.53, 3.28, nt); 
E,M,C,X = np.zeros(nt), np.zeros(nt), np.zeros(nt), np.zeros(nt)
n1, n2  = 1.0/(mcSteps*N*N), 1.0/(mcSteps*mcSteps*N*N) 
for tt in range(nt):E1 = M1 = E2 = M2 = 0config = initialstate(N)iT=1.0/T[tt]; iT2=iT*iT;for i in range(eqSteps):         mcmove(config, iT)          for i in range(mcSteps):mcmove(config, iT)           Ene = calcEnergy(config)     Mag = calcMag(config)        E1 = E1 + EneM1 = M1 + MagM2 = M2 + Mag*Mag E2 = E2 + Ene*EneE[tt] = n1*E1M[tt] = n1*M1C[tt] = (n1*E2 - n2*E1*E1)*iT2X[tt] = (n1*M2 - n2*M1*M1)*iT
f = plt.figure(figsize=(18, 10));   sp =  f.add_subplot(2, 2, 1 );
plt.scatter(T, E, s=50, marker='o', color='IndRed')
plt.xlabel("Temperature (T)", fontsize=20);
plt.ylabel("Energy ", fontsize=20);         plt.axis('tight');sp =  f.add_subplot(2, 2, 2 );
plt.scatter(T, abs(M), s=50, marker='o', color='RoyalBlue')
plt.xlabel("Temperature (T)", fontsize=20); 
plt.ylabel("Magnetization ", fontsize=20);   plt.axis('tight');sp =  f.add_subplot(2, 2, 3 );
plt.scatter(T, C, s=50, marker='o', color='IndianRed')
plt.xlabel("Temperature (T)", fontsize=20);  
plt.ylabel("Specific Heat ", fontsize=20);   plt.axis('tight');   sp =  f.add_subplot(2, 2, 4 );
plt.scatter(T, X, s=50, marker='o', color='RoyalBlue')
plt.xlabel("Temperature (T)", fontsize=20); 
plt.ylabel("Susceptibility", fontsize=20);   plt.axis('tight');

👉更新:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 安装 Maven 并配置环境变量

一、简介 Maven 是一款基于 Java 平台的项目管理和整合工具&#xff0c;用来构建项目的。也就是清理、编译、测试、运行、打包、安装整个过程都交给 Maven 管理&#xff0c;整个过程就是构建。 二、安装 Java JDK Maven 依赖 Java JDK&#xff0c;如果本机没有安装过 Java 的…

CRM客户关系管理系统的功能、作用、特点有哪些?

大家都知道&#xff0c;CRM是销售常用的客户关系管理系统。销售是客户关系管理系统中的主要组成部分&#xff0c;主要包括潜在客户、客户、联系人、业务机会、订单、回款单、报表统计图等模块。那么CRM只能销售人员用来管理客户关系吗&#xff1f; 其实&#xff0c;CRM的功能远…

HUAWEI_HCIA_实验指南_Lib2.1_交换机基础配置

1、原理概述 交换机之间通过以太网电接口对接时需要协商一些接口参数&#xff0c;比如速率、双工模式等。交换机的全双工是指交换机在发送数据的同时也能够接收数据&#xff0c;两者同时进行。就如平时打电话一样&#xff0c;说话的同时也能够听到对方的声音。而半双工指在同一…

开发日志:IIS安全配置

为了解决IIS文件路径泄漏问题&#xff0c;可以采取以下措施&#xff1a; 一. 详细操作 1. CMD关闭NTFS 8.3文件格式的支持 命令行&#xff1a;fsutil 8dot3name set 1 2. 修改注册表禁用短文件名功能 CMD输入regedit回车&#xff0c;在注册表中找到HKEY_LOCAL_MACHINE\SYSTEM\C…

离职跳槽,不要上了这些当!

在离职跳槽的过程中&#xff0c;许多人可能会遇到各种陷阱和误导&#xff0c;这些不当行为不仅会影响个人的职业发展&#xff0c;还可能带来经济损失和法律风险。以下是一些常见的离职跳槽陷阱及应对策略&#xff0c;帮助你避免上当。 一、离职前的陷阱 1. 盲目冲动离职 现象…

uniapp学习(005-1 详解Part.1)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第36p-第p40的内容 文章目录 响应式尺寸单位 rpx各种工具修改ui给的图片的宽度ps操作步骤即时设计操作步骤&…

Cherno游戏引擎笔记(61~72)

---------------一些维护和更改------------- 》》》》 Made Win-GenProjects.bat work from every directory 代码更改&#xff1a; echo off->pushd ..\->pushd %~dp0\..\call vendor\bin\premake\premake5.exe vs2019popdPAUSE 为什么要做这样的更改&#xff1f; …

Caffeine+Redis两级缓存架构

CaffeineRedis两级缓存架构 在高性能的服务项目中&#xff0c;我们一般会将一些热点数据存储到 Redis这类缓存中间件中&#xff0c;只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时&#xff0c;也能降低数据库的压力。 但是在一些场景下单纯使用 Redis 的分布…

Redis登录校验

登录拦截器 第一个拦截器只是确保一切请求都要进行token刷新的大动作 第二个拦截器从ThreadLocal中获取user用户 缓存一致性如何解决 并发情况下发生缓存不一致的问题&#xff0c;主要是因为写数据库和写缓存不是原子的 先写缓存&#xff0c;再写数据库 先写数据库&#xff…

Linux下Git操作

一、基本命令 1、创建 git 目录&#xff08;工作区&#xff09; mkdir gitcode 2、创建本地仓库&#xff0c;生成 .git 隐藏目录 git init 3、设置配置项 git config user.name "xxx" git config user.email "....." 4、查看配置项 git config -l …

QD1-P14 HTML 输入标签(input)

本节学习 HTML 常用标签&#xff1a;input 输入标签 ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p14 ‍ 知识点 1&#xff1a;简单示例 HTML <!DOCTYPE html> <html><head><meta charset"utf-8"><title>P14-input标签<…

在中国使用AWS服务器的法律要求与注册公司问题

随着云计算技术的迅猛发展&#xff0c;亚马逊网络服务&#xff08;AWS&#xff09;逐渐成为企业和开发者的首选平台。然而&#xff0c;当涉及到在中国境内使用AWS服务器时&#xff0c;许多人会关注一个重要问题&#xff1a;是否需要注册公司才能在中国运营AWS服务器&#xff1f…

Elasticsearch 实战应用

Elasticsearch 实战应用 引言 Elasticsearch 是一个分布式、RESTful 风格的搜索和分析引擎&#xff0c;能够快速、实时地处理大规模数据&#xff0c;广泛应用于全文搜索、日志分析、推荐系统等领域。在这篇博客中&#xff0c;我们将从 Elasticsearch 的基本概念入手&#xff…

【华为】配置BGP协议

边界网关协议BGP是一种实现自治系统AS之间的路由可达&#xff0c;并选择最佳路由的距离矢量路由协议。BGP在不同自治系统之间进行路由转发&#xff0c;分为EBGP&#xff08;外部边界网关协议&#xff09;和IBGP&#xff08;内部边界网关协议&#xff09;两种情况。 [A]in g0/0/…

《Windows PE》5.2 遍历导出表

为了将程序读到内存指定位置&#xff0c;本节我们将讨论如何使用两种不同的方法遍历导出表。此外&#xff0c;我们还将给出一个打印进程调用kernel32中的API信息的示例程序。 本节必须掌握的知识点&#xff1a; 遍历导出表 打印kernel32 5.2.1 遍历导出表 ■方法一 实验三十四…

【Vue.js】vue2 项目在 Vscode 中使用 Ctrl + 鼠标左键跳转 @ 别名导入的 js 文件和 .vue 文件

js 文件跳转 需要安装插件 Vetur 然后需要我们在项目根目录下添加 jsconfig.json 配置&#xff0c;至于配置的作于&#xff0c;可以参考我的另外一篇博客&#xff1a; 【React 】react 创建项目配置 jsconfig.json 的作用 它主要用于配置 JavaScript 或 TypeScript 项目的根…

C++ | Leetcode C++题解之第475题供暖器

题目&#xff1a; 题解&#xff1a; class Solution { public:int findRadius(vector<int>& houses, vector<int>& heaters) {sort(houses.begin(), houses.end());sort(heaters.begin(), heaters.end());int ans 0;for (int i 0, j 0; i < houses.…

华为---MUX VLAN简介及示例配置

目录 1. 产生背景 2. 应用场景 3. 主要功能 4. 基本概念 5. 配置步骤及相关命令 6.示例配置 6.1 示例场景 6.2 网络拓扑图 6.3 配置代码 6.4 配置及解析 6.5 测试验证 配置注意事项 1. 产生背景 MUX VLAN&#xff08;Multiplex VLAN&#xff09;提供了一种通过VLA…

InstructGPT的四阶段:预训练、有监督微调、奖励建模、强化学习涉及到的公式解读

1. 预训练 1. 语言建模目标函数&#xff08;公式1&#xff09;&#xff1a; L 1 ( U ) ∑ i log ⁡ P ( u i ∣ u i − k , … , u i − 1 ; Θ ) L_1(\mathcal{U}) \sum_{i} \log P(u_i \mid u_{i-k}, \dots, u_{i-1}; \Theta) L1​(U)i∑​logP(ui​∣ui−k​,…,ui−1​;Θ…

C++和OpenGL实现3D游戏编程【连载15】——着色器初步

&#x1f525;C和OpenGL实现3D游戏编程【目录】 1、本节实现的内容 上一节我们介绍了通过VBO、VAO和EBO怎样将顶点发送到GPU显存&#xff0c;利用GPU与显存之间的高效处理速度&#xff0c;来提高我们的图形渲染效率。那么在此过程中&#xff0c;我们又可以通过着色器&#xff…