【K230 实战项目】气象时钟

news2024/9/20 8:08:27

【CanMV K230 AI视觉】 气象时钟

  • 功能描述:
  • 说明
    • HMDI资源
    • 3.5寸屏幕
  • 使用方法

为了方便小伙伴们理解,请查看视频
B站连接

在这里插入图片描述


功能描述:

  1. 天气信息获取:通过连接到互联网,实时获取天气数据,包括温度、湿度、天气状况、风向
  2. 实时时间显示:气象时钟能够显示当前的时间。
  3. 可视化天气:包括城市, 温度,相对湿度,实时风向,空气质量

说明

HMDI资源

HDMI屏幕的小伙伴下载链接:K230 气象时钟文件,包含图片,字体,代码

在这里插入图片描述
我在此基础上做了一个HDMI的气象时钟。(为了让小伙伴多给上面的大佬点赞,我这边的资源是VIP资源。)小伙伴可以去大佬那里点赞领取代码文件。3.5屏幕的小伙伴直接使用。HDMI的,可以使用我下面的代码。(资源里都带)

3.5寸屏幕

由大佬Dai0707分享,下载链接原作者博客.https://forum.01studio.cc/t/topic/70/2

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

文件说明
ui图片
urllib代码
main.py3.5寸屏代码
main咸鱼浆.pyHDMI代码
Source…字体
'''
实验名称:天气时钟
实验平台:01Studio CanMV K230
镜像版本:V1.0
日期:2024-8-27验证发布
教程:wiki.01studio.cc
作者:半只半解
版本:v1.0
修改:咸鱼浆
HDMI显示,更改UI坐标等等
'''

import os, time, gc, sys, network, json, re
from clock.urllib import urequest ,ntptime
from media.display import *
from media.media import *
from machine import Pin

# 初始化 Wi-Fi 指示灯
WIFI_LED_PIN = 52
LED = Pin(WIFI_LED_PIN, Pin.OUT)
bg=image.Image(f"/sdcard/clock/ui/1.jpeg").to_rgb565()
# 选择显示方式
#Display.init(Display.ST7701)    # 使用 LCD 屏幕显示
Display.init(Display.LT9611) #通过HDMI显示图像
# 初始化媒体管理器
MediaManager.init()

# 创建图像对象用于绘制
canvas = image.Image(1920, 1080, image.RGB565)
canvas.clear()  # 清空图像

# WiFi账号密码
SSID ='123456'
CODE ='123456'

time.sleep(5) #等待WiFi模块初始化

def WIFI_Connect(max_retries=5):
    """
    连接到指定的 Wi-Fi 网络,并在屏幕上显示连接状态。

    """
    # 初始化 Wi-Fi 接口
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    start_time = time.time()  # 记录时间做超时判断
    retries = max_retries  # 重试次数

    if not wlan.isconnected():
        print('连接到网络...')
        canvas.clear()  # 清除屏幕并显示 "正在连接到 WiFi..." 的信息
        canvas.draw_string_advanced(600, 500, 80, "正在连接到 WiFi...", color=(255, 255, 255))
        Display.show_image(canvas)
        wlan.connect(SSID, CODE)  # WiFi连接

        while not wlan.isconnected():  # 添加重试逻辑
            LED.value(1)
            time.sleep_ms(300)
            LED.value(0)
            time.sleep_ms(300)

            if time.time() - start_time > 15:  # 超时判断,15秒没连接成功判定为超时
                print('WIFI 连接超时 !')
                wlan.active(False)
                return False

    if wlan.isconnected():
        LED.value(1)  # LED点亮
        canvas.clear()# 清除上次残留

        # 显示连接成功的信息
        canvas.draw_string_advanced(600, 200, 80, "WiFi 连接成功", color=(255, 255, 255))
        canvas.draw_string_advanced(600, 400, 80, "WiFi IP: " + wlan.ifconfig()[0], color=(255, 255, 255))
        canvas.draw_string_advanced(600, 600, 80, "咸鱼浆", color=(255, 137, 54))
        Display.show_image(canvas)
        print('网络信息:', wlan.ifconfig()) # 打印网络信息

        # 立即获取天气信息和同步时间
        weather_get()
        sync_ntp()
        return True

    else:
        canvas.clear() # 清除上次残留
        canvas.draw_string_advanced(600, 500, 80, "连接失败!", color=(255, 255, 255))
        Display.show_image(canvas)

        for _ in range(3):  # LED 闪烁三次提示连接失败
            LED.value(1)
            time.sleep_ms(300)
            LED.value(0)
            time.sleep_ms(300)

        print('连接失败!!!', wlan.ifconfig()) # 打印错误信信息并把LED重置为熄灭状态
        # LED 重置为熄灭状态
        LED.value(0)

        return False

    """"
    同步NTP服务器时间

    """
def sync_ntp():
    ntp_servers = ['202.120.2.101', 'ntp.ntsc.ac.cn']  # 第二个NTP服务器作为备选
    for server in ntp_servers:
        ntptime.host = server
        try:
            ntptime.settime()
            print(f"成功从 {server} 同步时间")
            break
        except Exception as e:
            print(f"从 {server} 同步ntp时间错误: {repr(e)}")
            continue
    else:
        print("所有NTP服务器均无法同步时间,请检查网络连接或NTP服务器地址。")

    """"
    处理日期和时间

    """

def zero_str(str_num):
    num = int(str_num)
    return "0" + str(num) if num > 0 and num < 10 else str(num)


    """
    天气爬取
    """

# 定义一个长度为5的字符列表
weather = ['']*5
is_first_run = True  # 添加一个标志来标记是否为首次运行

def weather_get(max_retries=5):
    print("尝试获取天气数据...")
    global weather
    retries = max_retries
    # 保存当前的天气信息
    previous_weather = weather.copy()
    while retries > 0:
        try:
            myURL = urequest.urlopen("http://www.weather.com.cn/weather1d/101070101.shtml")
            text = myURL.read(40000).decode('utf-8')  # 获取前38000个数据以节省内存
            #text = myURL.read(40000)  # 获取前38000个数据以节省内存  V1.1版本用这个
            # 在网页内容中找出 var observe24h_data 相关内容
            match = re.search('var observe24h_data = ' + '(.*?)' + ';', text)
            if match:
                text2 = json.loads(match.group(1))
                # 获取城市、温度、湿度、风向、风力级数
                weather[0] = text2['od']['od1']          # 城市
                weather[1] = text2['od']['od2'][0]['od22']  # 温度
                weather[2] = text2['od']['od2'][0]['od27']  # 相对湿度
                weather[3] = text2['od']['od2'][0]['od24']  # 实时风向
                weather[4] = text2['od']['od2'][0]['od28']  # 空气质量
                return  # 成功获取数据后退出函数
        except Exception as e:
            print(f"Error fetching weather data: {e}")
            retries -= 1  # 减少重试次数
            if retries > 0:
                print(f"尝试重新获取天气数据,剩余{retries}次...")
                time.sleep(5)  # 等待一段时间再重试
                # 如果获取失败,恢复之前的天气信息
    weather = previous_weather.copy()
    print("获取天气数据失败!")


    """"
    开始连接wifi

    """

try:
    wifi_connected = WIFI_Connect()
except Exception as e:
    print(f"连接WIFI失败: {e}")
    wifi_connected = False

# 如果连接失败,显示连接失败的信息
if not wifi_connected:
    print('WiFi连接失败.')
    canvas.clear()  # 清屏,黑色
    canvas.draw_string_advanced(600, 500, 80, "连接失败,复位重新连接!", color=(255, 255, 255))
    Display.show_image(canvas)  # 显示
    while True:
        pass  # 阻塞在此,不再继续执行
else:

    # 创建一个包含所有图片路径的列表
    #kof_paths = [f"/sdcard/clock/ui/kof/{i}.png" for i in range(1, 18)]  # 从1到17
    #star_paths = [f"/sdcard/clock/ui/star/{i}.png" for i in range(1, 25)]  # 从1到24
    #logo_paths = [f"/sdcard/clock/ui/logo/{i}.png" for i in range(1, 31)]  # 从1到31

    # 预处理所有图像并转换为RGB565格式
    #star_rgb565 = [image.Image(path).to_rgb565() for path in star_paths]
    #kof_rgb565 = [image.Image(path).to_rgb565() for path in kof_paths]
    #logo_rgb565 = [image.Image(path).to_rgb565() for path in logo_paths]

    # 用于显示图片
    #star_index = 0
    #kof_index = 0
    #logo_index = 0

    # 获取空气质量字符串
    aqi_str = weather[4]

    # 初始绘制,首次绘制.
    if is_first_run:
        # 清除上次残留
        canvas.draw_rectangle(0, 0, 1920, 1080, color = (0, 0, 0), thickness = 2, fill = True)
        canvas.draw_image(bg, 0, 0, alpha=256, scale=1.0)
        canvas.draw_string_advanced(140, 20, 120, f" {weather[0]} ", color = (255, 165, 0))

        # 绘制温度湿度信息
        canvas.draw_string_advanced(150, 190, 120, f"温度: {weather[1]}℃", color=(255,160,122))
        canvas.draw_string_advanced(900, 190, 120, f"湿度: {weather[2]}%", color=(32,178,170))

        # 清楚上次残留,并绘制风向信息
        canvas.draw_rectangle(140, 900, 840, 140, color = (199, 212, 195), thickness = 2, fill = True)
        canvas.draw_string_advanced(140, 900, 120, f"实时风向: {weather[3]}", color=(255, 255, 0))

        # 空气质量
        try:
            aqi = int(aqi_str)
        except ValueError:
            aqi = 0  # 设置默认值

        if 0 <= aqi < 50:  # 优
            canvas.draw_rectangle(900, 30, 120, 100, color=(0, 255, 0), thickness=2, fill=True)
            canvas.draw_string_advanced(900, 30, 80, f" 优!", color=(0, 0, 0))
        elif 50 <= aqi < 100:  # 良
            canvas.draw_rectangle(900, 30, 120, 100, color=(249, 218, 101), thickness=2, fill=True)
            canvas.draw_string_advanced(900, 30, 80, f" 良", color=(0, 0, 0))
        elif 100 <= aqi < 150:  # 轻度
            canvas.draw_rectangle(900, 30, 120, 100, color=(255, 165, 0), thickness=2, fill=True)
            canvas.draw_string_advanced(900, 30, 80, f" 轻度", color=(0, 0, 0))
        elif 150 <= aqi < 200:  # 中度
            canvas.draw_rectangle(900, 30, 120, 100, color=(212, 106, 106), thickness=2, fill=True)
            canvas.draw_string_advanced(900, 20, 80, f" 中度", color=(0, 0, 0))
        elif 200 <= aqi < 300:  # 重度
            canvas.draw_rectangle(900, 30, 120, 100, color=(220, 20, 60), thickness=2, fill=True)
            canvas.draw_string_advanced(900, 30, 80, f" 重度", color=(0, 0, 0))
        elif 300 <= aqi < 500:  # 严重
            canvas.draw_rectangle(900, 30, 120, 100, color=(139, 0, 0), thickness=2, fill=True)
            canvas.draw_string_advanced(900, 30, 80, f" 严重", color=(0, 0, 0))

        is_first_run = False  # 设置标志为False,下次循环不绘制这些信息

    # 主循环
    last_weather_update = time.time()  # 记录最后一次更新天气的时间

    try:
        while True:
            os.exitpoint() #检测IDE中断

            current_time = time.time()  # 当前时间
            localtime_now = time.localtime()  # 每次循环开始时定义 localtime_now

            if current_time - last_weather_update > 1000:  # 每隔1000秒更新一次天气信息
                last_weather_update = current_time
                weather_get()  # 获取天气
                sync_ntp()  # 同步时间
                aqi_str = weather[4]  # 更新空气质量字符串

                # 在同步时间之后获取本地时间并格式化
                time_str = '%s-%s-%s %s:%s:%s' % (
                    localtime_now[0],   # 年
                    zero_str(localtime_now[1]), # 月
                    zero_str(localtime_now[2]), # 日
                    zero_str(localtime_now[3]), # 小时
                    zero_str(localtime_now[4]), # 分钟
                    zero_str(localtime_now[5])  # 秒
                )
                print("当前日期和时间:",time_str)

                 # 清除上次残留, # 日期:年月日
                canvas.draw_rectangle(140, 400, 950, 200, color = (214, 202, 56), thickness = 2, fill = True)
                canvas.draw_string_advanced(120, 390, 180, f" {localtime_now[0]}-{zero_str(localtime_now[1])}-{zero_str(localtime_now[2])}", color=(144,238,144))

                # 清除上次残留, # 城市信息
                canvas.draw_rectangle(150, 20, 140, 140, color = (0, 0, 0), thickness = 2, fill = True)
                canvas.draw_string_advanced(140, 20, 120, f" {weather[0]} ", color = (255, 165, 0))

                # 绘制温度湿度信息
                canvas.draw_string_advanced(150, 190, 120, f"温度: {weather[1]}℃", color=(255,160,122))
                canvas.draw_string_advanced(900, 190, 120, f"湿度: {weather[2]}%", color=(32,178,170))

                # 清楚上次残留,并绘制风向信息
                canvas.draw_rectangle(140, 900, 840, 140, color = (199, 212, 195), thickness = 2, fill = True)
                canvas.draw_string_advanced(140, 900, 120, f"实时风向: {weather[3]}", color=(255, 255, 0))
                # 空气质量
                try:
                    aqi = int(aqi_str)
                except ValueError:
                    aqi = 0  # 设置默认值

                if 0 <= aqi < 50:  # 优
                    canvas.draw_rectangle(900, 30, 120, 100, color=(0, 255, 0), thickness=2, fill=True)
                    canvas.draw_string_advanced(900, 30, 80, f" 优!", color=(0, 0, 0))
                elif 50 <= aqi < 100:  # 良
                    canvas.draw_rectangle(900, 30, 120, 100, color=(249, 218, 101), thickness=2, fill=True)
                    canvas.draw_string_advanced(900, 30, 80, f" 良", color=(0, 0, 0))
                elif 100 <= aqi < 150:  # 轻度
                    canvas.draw_rectangle(900, 30, 120, 100, color=(255, 165, 0), thickness=2, fill=True)
                    canvas.draw_string_advanced(900, 30, 80, f" 轻度", color=(0, 0, 0))
                elif 150 <= aqi < 200:  # 中度
                    canvas.draw_rectangle(900, 30, 120, 100, color=(212, 106, 106), thickness=2, fill=True)
                    canvas.draw_string_advanced(900, 20, 80, f" 中度", color=(0, 0, 0))
                elif 200 <= aqi < 300:  # 重度
                    canvas.draw_rectangle(900, 30, 120, 100, color=(220, 20, 60), thickness=2, fill=True)
                    canvas.draw_string_advanced(900, 30, 80, f" 重度", color=(0, 0, 0))
                elif 300 <= aqi < 500:  # 严重
                    canvas.draw_rectangle(900, 30, 120, 100, color=(139, 0, 0), thickness=2, fill=True)
                    canvas.draw_string_advanced(900, 30, 80, f" 严重", color=(0, 0, 0))

            ###########
            #主循环绘制#
            ###########
            # 清除上次残留, # 日期:年月日
            canvas.draw_rectangle(140, 400, 950, 200, color = (214, 202, 56), thickness = 2, fill = True)
            canvas.draw_string_advanced(120, 390, 180, f" {localtime_now[0]}-{zero_str(localtime_now[1])}-{zero_str(localtime_now[2])}", color=(144,238,144))
            # 清除上次残留,# 时间 :小时分钟秒
            canvas.draw_rectangle(140, 620, 700, 170, color = (102, 218, 119), thickness = 2, fill = True)
            canvas.draw_string_advanced(120, 610, 150, f" {zero_str(localtime_now[3])}:{zero_str(localtime_now[4])}:{zero_str(localtime_now[5])}", color=(199, 237, 204))
            # 图片绘制
           #
           # canvas.draw_image(star_rgb565[star_index], 480, 0, alpha=256, scale=1.0)
           # canvas.draw_image(kof_rgb565[kof_index], 700,700, alpha=256, scale=1.0)
            Display.show_image(canvas)  # 显示图片

            time.sleep_ms(20)   # 消除图片过快鬼畜

            # 查询内存,可有可无K230随便造这些小功能
            DRAM = gc.mem_free()
            if DRAM < 1000000:  # 内存不足
                gc.collect()  # 回收内存

            # 更新索引,使用模运算实现循环
           # star_index = (star_index + 1) % len(star_rgb565)
           # kof_index = (kof_index + 1) % len(kof_rgb565)
           # logo_index = (logo_index + 1) % len(logo_rgb565)
          #  bg = (bg) % len(bg_rgb565)
    except KeyboardInterrupt:
        print("用户停止程序")
    except Exception as e:
        print(f"发生异常: {e}")
    finally:
        # 释放显示资源
        Display.deinit()
        MediaManager.deinit()
        os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)

使用方法

大致使用方法:

1,首先连接WIFI
在这里插入图片描述
输入WIFI账号密码

2,默认获取的是深圳市的气象数据
在这里插入图片描述
修改城市的方法也很简单,找到这段代码
在这里插入图片描述
把HTTP复制 在浏览器上粘贴
在这里插入图片描述
改一下自己想看的地方,然后吧链接替换就行
在这里插入图片描述

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

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

相关文章

【STM32】独立看门狗(IWDG)原理详解及编程实践(上)

本篇文章是对STM32单片机“独立看门狗&#xff08;IWDG&#xff09;”的原理进行讲解。希望我的分享对你有所帮助&#xff01; 目录 一、什么是独立看门狗 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;、独立看门狗的原理 &#xff08;三&#xff09;、具体操…

vulkano (rust) 画一个三角形 (vulkan 渲染窗口初始化 (Linux) 下篇)

上文说到, vulkan 相比 OpenGL (ES), 更加贴近底层硬件, 许多东西需要应用软件手动管理, 所以 vulkan 的初始化过程比较麻烦, 或者说学习曲线比较陡峭. 但是, 这种麻烦是一次性的, 一旦学会了, 就能开始享受 vulkan 的诸多好处啦 ~ 本文以绘制一个三角形为例, 介绍 vulkan 的初…

2024最新版,人大赵鑫老师《大语言模型》新书pdf分享

本书主要面向希望系统学习大语言模型技术的读者&#xff0c;将重点突出核心概念与 算法&#xff0c;并且配以示例与代码&#xff08;伪代码&#xff09;帮助读者理解特定算法的实现逻辑。由于大语言模型技术的快速更迭&#xff0c;本书无法覆盖所有相关内容&#xff0c;旨在梳理…

瓶中水位检测系统源码分享

瓶中水位检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【数据结构】图的概念和存储结构

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C游记》《进击的C》《Linux迷航》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、图的概念二、图的存储结构2.1 邻接矩阵2.1.1 成员变量与默认成员函数2.1.2 GetIndex2.1.3 AddEdge2.1.4 Pr…

使用 Java 初步搭建简单Spring 项目框架:

一、准备工作 安装 Java Development Kit (JDK)&#xff0c;确保环境变量配置正确。 安装一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;如 IntelliJ IDEA 或 Eclipse。 二、创建项目——具体步骤 在 ider 中创建一个新的 Maven 项目 使用 Maven&#xff1a; 在…

Linux bash脚本本地开发环境(Git Bash)配置

参考资料 VSCode: Windows 下配置 VSCode运行shellVSCodeを使用したシェルスクリプトの開発環境作成 目录 一. 必备VSCode插件二. 插件配置说明2.1 Bash IDE2.2 Code Runner2.3 shell-format 一. 必备VSCode插件 Bash IDE 该插件为 Bash 脚本提供了一些实用的开发工具和功能&…

鸿蒙 ArkUI组件二

ArkUI组件&#xff08;续&#xff09; 文本组件 在HarmonyOS中&#xff0c;Text/Span组件是文本控件中的一个关键部分。Text控件可以用来显示文本内容&#xff0c;而Span只能作为Text组件的子组件显示文本内容。 Text/Span组件的用法非常简单和直观。我们可以通过Text组件来显…

重生归来之挖掘stm32底层知识(1)——寄存器

概念理解 要使用stm32首先要知道什么是引脚和寄存器。 如下图所示&#xff0c;芯片通过这些金属丝与电路板连接&#xff0c;这些金属丝叫做引脚。一般做软件开发是不需要了解芯片是怎么焊的&#xff0c;只要会使用就行。我们平常通过编程来控制这些引脚的输入和输出&#xff0c…

应用软件系统开发实操二:任务需求描述

工信部软件界信息技术服务业2020、2021、2022年度数据&#xff08;目前只有这3年的完整数据&#xff09;&#xff0c;以SQL的格式&#xff0c;存放在实操平台上&#xff0c;通过浏览器下载的方式获取。获取数据后&#xff0c;采用自己选择的技术对数据进行处理。阅读下面的要求…

php语言基本语法

HP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源服务器端脚本语言&#xff0c;特别适合于Web开发。 它能够嵌入到HTML中&#xff0c;执行动态网页内容。 PHP的一些基本语法元素&#xff1a; 1. 基本结构 PHP代码通常嵌入到HTML中&#xff0c;以<…

C/C++实现植物大战僵尸(PVZ)(打地鼠版)

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 游戏…

Django_Vue3_ElementUI_Release_003_前端Vue3项目初始化

1. 概念扫盲 Node.js是基于ChromeV8引擎&#xff0c;让JS在服务端运行的开发平台&#xff0c;就是JS的一种解释器WebPack就是模块打包机&#xff0c;把浏览器不能直接运行的拓展语言找到并打包为合适的格式给浏览器直接使用Vue基于WebPack构件项目的&#xff0c;并带有合理默认…

MoCo对比损失

MoCo&#xff08;Momentum Contrast&#xff0c;动量对比学习&#xff09;是一种自监督学习方法&#xff0c;由Facebook AI Research提出&#xff0c;主要用于无监督学习视觉表示。在MoCo中&#xff0c;对比损失&#xff08;Contrastive Loss&#xff09;扮演着至关重要的角色&…

在麒麟操作系统中查看进程运行时间

在麒麟操作系统中查看进程运行时间 1、使用ps命令查看进程运行时间1.1 基本命令结构1.2 示例&#xff1a;查看sshd进程的运行时间 2、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Linux操作系统中&#xff0c;包括麒麟&#xff08…

使用Mockito进行单元测试

1、单元测试介绍 Mockito和Junit是用于单元测试的常用框架。单元测试即&#xff1a;从最小的可测试单元&#xff08;如函数、方法或类&#xff09;开始&#xff0c;确保每个单元都能按预期工作。单元测试是白盒测试的核心部分&#xff0c;它有助于发现单元内部的错误。 单元测试…

【Hot100】LeetCode—84. 柱状图中最大的矩形

目录 1- 思路题目识别单调栈 2- 实现⭐84. 柱状图中最大的矩形——题解思路 3- ACM 实现 原题链接&#xff1a;84. 柱状图中最大的矩形 1- 思路 题目识别 识别1 &#xff1a;给定一个数组 heights &#xff0c;求解柱状图的最大面积 单调栈 使用 Stack 来实现&#xff0c;遍…

服务器上PFC配置丢失问题排查与解决方案

现象 基于nccl的多轨通信算力中心出现交换机端口出入方向丢包 分析 机间通信使用RoCE网络&#xff0c;为了避免因丢包导致大量重传报文影响训练性能&#xff0c;我们基于PFC和ECN在交换机和服务器配置搭建了无损网络&#xff0c;理论上是不允许丢包的&#xff0c;现在出现交…

时序差分法

一、时序差分法 时序差分是一种用来估计一个策略的价值函数的方法&#xff0c;它结合了蒙特卡洛和动态规划算法的思想。时序差分方法和蒙特卡洛的相似之处在于可以从样本数据中学习&#xff0c;不需要事先知道环境&#xff1b;和动态 规划的相似之处在于根据贝尔曼方程的思想&…

接口测试(十二)

一、前台、后台、数据库三者关系 fiddler抓包是抓取客户端 --> 服务端 发送的的请求接口 开N个网页&#xff0c;只要有对后端发送请求&#xff0c; fiddler是无差别抓取 F12只抓取当前页面的数据 二、接口概念 接口是什么&#xff1f;— 传递数据的通道 测试系统组件间接口…