news 2026/10/1 3:01:15

Madeira项目实践:从项目名拆解到旅游平台落地的技术指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Madeira项目实践:从项目名拆解到旅游平台落地的技术指南

1. 项目定位:先搞清楚“Madeira”到底指什么

拿到一个项目名,我习惯先做一件事:把名字拆开,看它可能指向哪个方向。因为很多时候项目名只是一个代号,真正要做的东西,藏在名字背后的语境里。

“Madeira”这个词,第一反应是地理名词——大西洋上的马德拉群岛,葡萄牙的海外领地,以风景和葡萄酒闻名。但在技术圈里,它至少还有几个完全不同的含义:一个轻量级CSS框架、一个Figma设计系统模板、一个Node.js日志库,甚至一个开源社区的demo项目名。如果你接到一个项目,命名叫Madeira,先别急着写代码,第一步应该是把“这个名字对应什么业务”这件事确认清楚。

我遇到过不少团队项目,名字起得特别随意,最后开发到一半才发现大家对“这个项目是做什么的”理解完全不一致。所以这篇博文我打算以“Madeira”为引子,分享一套我从项目名出发,拆解需求、确定技术方向、落地核心功能的完整思路。不管你的项目是否也叫Madeira,这套“从名字到方案”的推演方法都能直接套用。

先把我能想到的Madeira可能指向的方向列一下:

  • 地理/旅游方向:马德拉群岛相关的旅游平台、酒店预订系统、景点导览应用
  • 食品/酒类方向:马德拉葡萄酒的电商、品鉴社区、进口商管理系统
  • 前端方向:Madeira这款轻量级CSS框架的二次开发或应用搭建
  • 设计方向:Figma上的Madeira设计系统模板,用于快速生成UI界面
  • 软件开发方向:以Madeira命名的内部工具、API服务、日志系统等

我接这类“只有一个名字”的项目时,会先画一张决策树,用几个关键问题把范围收敛:

  1. 这个项目有没有业务方?业务方提到的第一批关键词是什么?
  2. 项目名是产品名、公司名,还是技术代号?
  3. 项目预期的交付物是网站、App、组件库,还是一套文档?

如果这三点都答不上来,那就老老实实先做调研,别动手。

2. 需求拆解与方向收敛:从含糊到具体的思考过程

2.1 当“Madeira”是一个旅游项目时

假设业务方告诉你:“我们要做一个围绕马德拉群岛的旅游信息平台。”那么需求拆解就围绕旅游行业的标准链路来做:游客决策前需要了解目的地、查看攻略、规划行程;决策中需要比较酒店、机票、当地体验项目;决策后需要预订、支付、获取凭证、行程提醒。

  • 核心用户:自由行游客、蜜月旅行者、户外徒步爱好者
  • 核心场景:目的地种草、行程规划、当地预订
  • 核心功能:景点数据库、行程编辑器、酒店/体验预订、用户评价体系

2.2 当“Madeira”是一个前端项目时

如果项目名对应的是CSS框架“Madeira”,那事情就完全不一样了。这个框架主打轻量、无依赖、语义化类名,适合快速搭建静态页面原型。在这种场景下,重点就不是业务功能,而是:

  • 框架本身的定制化配置(变量、主题、布局系统)
  • 组件封装(按钮、卡片、导航、表单)
  • 与现有工程(Vue/React/原生HTML)的集成方式

2.3 当“Madeira”是一个内部工具代号时

还有一种常见情况:Madeira只是团队内部随口起的代号,实际项目可能是一个监控系统、一个数据同步服务、一个自动化脚本集。这时候项目名几乎不提供业务信息,你需要直接去找代码仓库、需求文档,或者找提需求的同事聊。

我曾经接过一个名为“Polaris”的项目,听起来像个星象相关的产品,实际上是一个内部权限管理后台。名字取自北极星,寓意“导航方向”。这种“代号与业务无关”的情况,在技术团队里特别常见。

所以,拆解“只有一个标题的项目”时,我的行动清单是:

  1. 列出所有可能的解读方向
  2. 找业务方确认真实场景(没有业务方就让需求文档说话)
  3. 按“用户-场景-功能”三层结构重新定义项目边界
  4. 输出一页纸的项目简报,让所有相关方确认

这个方法,无论是做旅游平台、前端框架还是内部工具,都是通用的。面对“Madeira”这个标题,如果你拿到的信息只有这三个字,那么输出方案远比输出代码更有价值。先确认方向,再讨论实现,这是避免返工的唯一捷径。

3. 标品方案设计:以旅游信息平台为例的完整拆解

如果项目方向确定为“马德拉群岛旅游信息平台”,我就按这个方向继续展开。为了让整篇博文有可落地的参考意义,我把这个场景从功能清单到技术选型、数据库设计、核心代码、避坑经验全部走一遍。这套设计可以直接复制到你自己的项目里,替换掉业务字段就行。

3.1 功能清单与优先级

我用“Moscow”法则(Must have / Should have / Could have)把功能分层:

优先级功能模块说明
P0景点库马德拉群岛核心景点、图片、位置、简介、开放时间
P0行程规划用户选择天数,系统推荐景点组合,支持手动调整
P0目的地指南图文混排的攻略内容,按主题分类(徒步、美食、海滩、文化)
P1酒店/体验预订对接第三方API或跳转官网,不直接做支付
P1用户系统注册/登录、收藏、行程保存
P2多语言葡萄牙语、英语、中文、德语
P2评论系统用户对景点、餐厅打分评价

P0是产品能不能成立的关键,P1是体验完整性,P2是锦上添花。如果你是一个人开发,别想着全做完,P0先上线,验证用户是否真的需要,再迭代P1。

3.2 技术选型思路

旅游信息平台本质上是“内容展示 + 用户交互”的Web应用,对实时性要求不高,对SEO要求很高——毕竟用户是通过搜索引擎发现你的。

我建议的前端技术栈是:

  • 框架:Next.js。服务端渲染对SEO友好,页面加载速度快,图片优化是内置的,特别适合这类内容密集型站点
  • 样式:Tailwind CSS。写起来快,类名语义化,配合响应式断点能快速适配移动端(马德拉群岛的游客大量使用手机)
  • 数据层:PostgreSQL + Prisma ORM。PostgreSQL的jsonb字段、地理位置查询、全文检索对旅游内容都很实用
  • 部署:Vercel或自己的服务器,看预算和流量预期

为什么不用传统的Vue SPA或者纯静态站点?

  • 纯静态站点(Hugo/Jekyll)适合内容不变的个人博客,但这个平台有用户数据、动态评论,静态化很别扭
  • 传统SPA(Vue/React + API)对SEO不友好,虽然可以通过预渲染补救,但多一步配置就多一个坑
  • Next.js的App Router出来后,页面级缓存、流式渲染、Server Actions都做得比较顺手,一个人也能hold住

3.3 数据库设计要点

旅游平台的核心数据模型有四个:目的地、景点、用户、行程。

我直接给出简化版的Prisma Schema样例,你可以照着改:

model Destination { id String @id @default(cuid()) name String description String coverImage String status String @default("draft") // draft / published createdAt DateTime @default(now()) areas Area[] } model Area { id String @id @default(cuid()) destinationId String destination Destination @relation(fields: [destinationId], references: [id]) name String slug String @unique intro String lat Float? lng Float? attractions Attraction[] } model Attraction { id String @id @default(cuid()) areaId String? area Area? @relation(fields: [areaId], references: [id]) name String slug String summary String content String coverImage String openTime String? ticket String? lat Float? lng Float? createdAt DateTime @default(now()) } model User { id String @id @default(cuid()) email String @unique name String? avatar String? itineraries Itinerary[] } model Itinerary { id String @id @default(cuid()) userId String user User @relation(fields: [userId], references: [id]) title String days Int stops ItineraryStop[] createdAt DateTime @default(now()) } model ItineraryStop { id String @id @default(cuid()) itineraryId String itinerary Itinerary @relation(fields: [itineraryId], references: [id]) attractionId String day Int order Int }

几个设计决策背后的考虑:

  1. Destination、Area、Attraction三级结构:马德拉本岛、圣港岛是两个大目的地,下面分丰沙尔、卡列塔等区域,区域下面才是具体景点。这样三级划分,以后做筛选和推荐时有清晰的层级
  2. 行程明细用子表ItineraryStop:用户行程是多天的,每天有多个景点,用子表存储顺序,方便调整排序和分组
  3. status字段做草稿/发布切换:内容编辑难免要改改看看,直接发布太危险,加一个状态字段就能控制上线节奏

3.4 服务端渲染与SEO关键代码

这种内容平台,SEO是命脉。我用Next.js App Router做服务端渲染,核心页面结构示意如下:

// app/[slug]/page.tsx import { prisma } from '@/lib/prisma'; import { notFound } from 'next/navigation'; import { AttractionCard } from '@/components/attraction-card'; import type { Metadata } from 'next'; export async function generateMetadata({ params }): Promise<Metadata> { const area = await prisma.area.findUnique({ where: { slug: params.slug }, include: { destination: true } }); if (!area) return { title: '页面未找到' }; return { title: `${area.name} - 马德拉旅游指南`, description: area.intro?.slice(0, 160) ?? `探索${area.name}的景点与玩法`, }; } export default async function AreaPage({ params }) { const area = await prisma.area.findUnique({ where: { slug: params.slug }, include: { destination: true, attractions: { where: { status: 'published' }, orderBy: { createdAt: 'desc' } } } }); if (!area) notFound(); return ( <main className="container mx-auto px-4 py-8"> <nav className="text-sm text-gray-500 mb-6"> <a href={`/${area.destination.slug}`}>{area.destination.name}</a> <span> / {area.name}</span> </nav> <h1 className="text-3xl font-bold mb-4">{area.name}</h1> <p className="text-lg text-gray-700 mb-8">{area.intro}</p> <div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3"> {area.attractions.map((attraction) => ( <AttractionCard key={attraction.id} attraction={attraction} /> ))} </div> </main> ); }

这里的关键点是generateMetadata。Next.js会在服务端渲染之前先跑一遍这个函数,把页面标题和描述写入HTML的<head>里。搜索引擎爬虫抓取的就是这些内容。一个常见的坑是忘了做404处理——slug不对时返回错误页面,而不是让用户看到空白页。用notFound()函数是最省事的标准做法。

3.5 交互功能:行程规划的实现思路

行程规划是本项目最“产品向”的功能。核心逻辑不复杂:用户选择游玩天数,然后从景点库里挑选景点,拖拽排序到对应的“第几天”里,系统自动提示每天的行程强度(比如步行距离、是否需要包车)。

后端核心逻辑用一个函数来表达:

// 行程生成:根据用户选择的天数和区域,推荐每日景点组合 export function buildItinerary(selectedAttractions: Attraction[], totalDays: number): ItineraryDay[] { // 按区域聚类 const grouped = groupBy(selectedAttractions, (a) => a.areaId); // 将景点按区域分散到各天,避免一天全在赶路 const days: ItineraryDay[] = Array.from({ length: totalDays }, (_, i) => ({ day: i + 1, stops: [] })); // 简单轮询分配:依次取每个组的第一个、第二个... let index = 0; const keys = Object.keys(grouped); while (keys.some((k) => grouped[k].length > 0)) { for (const key of keys) { const item = grouped[key].shift(); if (item) { days[index % totalDays].stops.push({ order: days[index % totalDays].stops.length + 1, attraction: item, }); index++; } } } return days.sort((a, b) => a.day - b.day); }

这个写法是“轮询分配”,保证同一个区域的景点尽量分散到不同天,而不是第一天全走A区域,第二天全走B区域——那样游客一天要跑很多路。实际生产环境里还会加入交通耗时的评估,但这版逻辑作为MVP已经够用了。

交互层的实现有个坑:拖拽排序后必须恢复后端生成的顺序。我踩过好多次,用户手动调整了第二天的景点顺序,结果一刷新就回到系统默认排好了。原因是前端只用本地state,没有把调整结果同步到后端。解决方式是每次拖拽结束,就调用API把ItineraryStop的order字段批量更新,用Promise.all并行提交。

4. 实操过程:从零搭建“Madeira”项目的完整步骤

接下来从头走一遍实操流程。不管你的项目叫不叫Madeira,这套步骤都能照搬,只要把业务字段和页面替换成你自己的。

4.1 环境准备与项目初始化

我平时接这种内容型项目,用到顺手的一套组合是:Node.js 20 LTS、pnpm、Next.js 14。起步命令如下:

# 初始化 Next.js 项目 npx create-next-app@latest madeira --typescript --tailwind --eslint --app --src-dir cd madeira # 安装数据库 ORM 和所需库 pnpm add @prisma/client pnpm add -D prisma # 初始化 Prisma npx prisma init --datasource-provider postgresql

几个选择的原因:

  • pnpm比npm快不少,磁盘占用也小,最重要的是它能严格执行依赖隔离,避免“我本机能跑你本机报错”的问题
  • TypeScript对这种内容结构模型很合适。用户、景点、行程都有明确的字段结构,类型一旦定义好,写页面时自动提醒能省大量时间
  • src目录是我个人的偏好,把应用代码放在src/下,和顶层配置文件分开,结构更清爽

4.2 数据初始化与后台填充

项目刚创建完,数据库是空的,要先写一个seed脚本把基础数据填进去。旅游平台的第一批数据非常关键,直接决定用户搜索时看到什么。

我用一个简单的seed脚本做示例:

// prisma/seed.ts import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function main() { const destination = await prisma.destination.upsert({ where: { id: 'madeira-island' }, update: {}, create: { id: 'madeira-island', name: '马德拉群岛', description: '大西洋上的花岛,以徒步路线和传统葡萄酒闻名', coverImage: '/images/madeira-hero.jpg', status: 'published', }, }); const funchal = await prisma.area.create({ data: { destinationId: destination.id, name: '丰沙尔', slug: 'funchal', intro: '马德拉的首府,老城区、市集和缆车是核心体验', lat: 32.6669, lng: -16.9241, }, }); await prisma.attraction.createMany({ data: [ { areaId: funchal.id, name: '丰沙尔缆车', slug: 'funchal-cable-car', summary: '连接老城区与蒙特花园的空中缆车', content: '全程约15分钟,俯瞰整个海湾和城市', coverImage: '/images/cable-car.jpg', openTime: '09:00-18:00', }, { areaId: funchal.id, name: '马尔凯斯·帕拉西奥花园', slug: 'monte-palace-gardens', summary: '热带植物与人工湖组成的百年花园', content: '适合步行,建议预留90分钟', coverImage: '/images/garden.jpg', }, ], }); } main() .then(() => console.log('Seed completed')) .finally(async () => { await prisma.$disconnect(); });

执行:

npx prisma db seed

seed脚本最大的价值不在于填一次数据,而在于它是可重复执行的环境初始化工具。换一台电脑,拉下代码,跑一遍seed,数据库就恢复成可用状态。我以前试过手工往数据库里插数据,结果换环境时忘了备份,整个开发环境用了两天才恢复。

4.3 页面开发与部署上线的完整链路

页面开发阶段,我的任务清单大致如下:

  1. 首页:大图轮播 + 目的地入口 + 热门景点推荐
  2. 目的地页:导航 + 景点分层展示
  3. 景点详情页:封面图 + 基本信息 + 图文详情 + 用户评论
  4. 行程规划页:天数选择 + 景点挑选 + 每日排序 + 行程保存
  5. 用户登录页:邮箱登录 + 社交账号登录(第三方接入)

开发过程中最值得说的点有两个:

**第一,图片处理一定要用next/image组件。**它自动做响应式尺寸适配、WebP格式转换、懒加载,对页面性能提升非常明显。直接用<img>标签的页面在Lighthouse里的Performance分数会低10到20分。

// 正确用法 import Image from 'next/image'; <Image src={area.coverImage} alt={area.name} width={1200} height={630} className="rounded-xl object-cover" priority />

**第二,评论功能用“登录后评论 + 审核后展示”的方案。**国内外很多内容平台都被垃圾评论和机器人刷屏搞得很被动。一开始就把评论权限关紧——未登录用户允许浏览,登录后才能评论,评论默认不可见,管理员审核后才公开展示。这个策略能省掉90%的垃圾内容治理成本。

全部功能开发完成后,部署到服务器:

# 构建生产版本 npm run build # 启动服务 npm start

生产环境我习惯用PM2守护进程,防止进程意外退出:

pm2 start npm --name madeira -- start pm2 save pm2 startup

如果你不想折腾服务器,Vercel是最省事的选择,连Dockerfile都不用写,push到Git仓库自动部署。

5. 常见问题与排查技巧实录

实操中一定会踩坑。我把我遇到的典型问题整理成了速查表,每个都能直接对号入座。

5.1 生产环境常见问题

现象原因解决方案
页面404,控制台无任何报错数据库中有空slug或重复slug写一个预检脚本扫描slug字段,保证唯一非空
图片加载极慢没有用next/image做尺寸适配全局替换img标签,设置sizes属性
数据库连接池耗尽服务端组件中每次查询都new PrismaClient使用单例模式,确保全局只有一个实例
部署后页面样式丢失CSS文件缓存版本未更新设置Vercel或Nginx的hash文件名缓存策略
API接口偶发超时没有做分页查询,一次拉全量数据统一使用cursor分页或offset分页

5.2 数据库连接问题的排查思路

如果你用的是Prisma + PostgreSQL,遇到“connection limit exceeded”的报错,95%是因为PrismaClient被反复实例化。Next.js开发模式下热更新会触发多次初始化,生产环境下多个服务实例也会各自建连接池。

正确姿势是把客户端做成单例:

// lib/prisma.ts import { PrismaClient } from '@prisma/client'; const globalForPrisma = globalThis as unknown as { prisma: PrismaClient | undefined; }; export const prisma = globalForPrisma.prisma ?? new PrismaClient({ log: process.env.NODE_ENV === 'development' ? ['query', 'error'] : ['error'], }); if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;

这段代码的逻辑是:开发模式下热更新频繁,把实例挂到globalThis上防止重复创建;生产模式下每次加载模块都创建一次,但因为服务实例是常驻的,所以也只会有一个实例。

5.3 用户反馈“行程保存失败”的排查记录

有一个比较典型的bug,我记录一下排查过程,给大家做个参考:

用户把6个景点排到3天,点保存,接口返回500。排查步骤如下:

  1. 查服务端日志,发现报错是PrismaClientKnownRequestError,code为P2003——外键约束失败
  2. 检查提交的数据,发现前端传来的attractionId里有两个不存在的ID
  3. 再往前查,发现这两个ID是用户从“收藏列表”里选的,而收藏列表里存了其他平台的旧数据
  4. 根因:景点数据从旧平台迁移过来时,有两条记录是被逻辑删除的,但收藏表没有同步清理

解决方案分两步:前端在收藏列表点击时先校验景点是否有效,后端在保存行程时用upsert替代create,避免重复数据导致外键冲突。

这个案例给到的经验是:数据迁移一定要做完整性校验,“逻辑删除”的脏数据往往是线上bug的最大来源。

6. 项目名称的扩展思考与个人心得

回头再看“Madeira”这个项目名,我突然觉得它挺有代表意义。一个好的项目名,能让你在工作群里喊一声就知道说的是什么;一个含糊的项目名,则需要花额外的时间去对齐认知。但不管名称是否清晰,真正决定项目质量的,仍然是需求拆解的深度和执行过程中的细节把控。

我个人在实际操作中有一个习惯:拿到任何项目名,第一周不写业务代码,专注做两件事——把需求的边界画清楚,把技术选型的决定记录下来。这个习惯让我避免了好几次大返工。你如果也想复刻这套流程,有几个心得可以参考:

  • 项目名只是入口,需求才是地基。花一天时间把用户画像、核心场景、功能优先级写成文档,比花一周写代码更重要
  • 先做P0,再谈P1。不要被“功能越多越好”绑架,一个能跑通核心链路的MVP比半成品大而全系统有价值得多
  • 数据库设计阶段多花时间思考,后续开发能省两倍时间。像Destination-Area-Attraction这种三级分类结构,当初只是多想了十分钟,后来做筛选、做推荐、做SEO都顺畅了
  • 坑是必需的,但要把坑记录下来。每个踩过的bug都是一个可复用的经验,整理成文档之后,下次遇到同样的问题三分钟就能定位

“Madeira”这个项目如果真的落地,它可能会是一个小而美的旅游信息站,也可能是一个内容二次创作的工具链,甚至可能只是一个研究用demo——取决于谁在什么场景下用它。我在这个项目里交付的方案,也是同样的逻辑:先定义清楚问题域,再配齐执行步骤。

7. 后续扩展方向建议

这套方案做完MVP之后,再往下走大致有几个方向可以考虑,我按投入产出比排序:

**第一优先:数据可视化升级。**旅游平台最怕“内容很全但用户浏览深度不够”。可以基于景点位置数据做一个交互式地图,用户在地图上点标记就能看到景点卡片。技术实现上可以用Leaflet或Mapbox,配合后端的地理位置查询,对体验提升明显。

**第二优先:多语言大规模接入。**马德拉群岛的游客构成非常多元,葡萄牙语是官方语言,英德法游客占比很高。文本翻译可以先用机器翻译跑一轮,配合人工校对,把主要页面(首页、目的地页、景点页)的英文和德文version先上线。

**第三优先:商业变现的尝试。**旅游平台最常见的变现模式是佣金制,跳转酒店预订平台拿返佣。接入Booking.com或Agoda的联盟API,技术成本不算高,但收益和流量强相关,适合有一定用户基础后再考虑。

**第四优先:内容运营后台。**帮编辑团队做一个简易的CMS后台,支持批量导入、定时发布、数据统计。这个功能自己做成本不低,初期也可以用现成的Headless CMS(比如Strapi或PayloadCMS)改造,能省不少事。

我给人的建议是:扩展方向可以有多个,但每个季度只集中做一件事。不要同时搞地图、多语言和变现,专注一个方向推进到可量化的结果,再启动下一个。我自己在项目推进中最容易失控的时刻,就是想要的太多、做的太少,最后哪个功能都不完整。

“Madeira”这个项目名你能读出一千种意义,但真正把它变成一个可用的产品,靠的还是每一步的踏实执行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 3:01:08

Windows下MSVC编译QGIS 3.34 LTR完整流程与踩坑指南

编译 QGIS&#xff0c;说难也难&#xff0c;说简单也简单。难在依赖多、版本杂、报错信息往往不直白&#xff1b;简单在于一旦环境理顺&#xff0c;剩下就是等进度条。我自己在 Windows 10 上用 MSVC 编译 QGIS 3.34.10 的整个过程前后折腾了两天&#xff0c;踩了不少坑&#x…

作者头像 李华
网站建设 2026/10/1 3:00:41

中山市靠谱的GEO推广机构排名:智能行业筛选服务商合作实力参考

不少正在布局海外流量的企业&#xff0c;都在通过不同渠道寻找口碑好的GEO推广公司&#xff0c;也会主动搜索GEO推广公司推荐、诚信的GEO推广企业这类关键词&#xff0c;希望能筛选出匹配自身需求的靠谱合作方。在当前全球跨境贸易不断深化的背景下&#xff0c;国内尤其是中山本…

作者头像 李华
网站建设 2026/10/1 3:00:21

探索Plotly:如何用柱状图展示复杂数据

这是第二款关于开源图形库的介绍。现在, 我们这一节还是要接着去继续研究一下, 库里面那些其他的几种类型的图, 它们到底是用一种什么样的方式给构建起来的。这节当中所主要涉及到的内容, 是对于一些柱状图的基本使用方法的展示。1.柱状图在开始绘制图像这个步骤之前, 我们首要…

作者头像 李华
网站建设 2026/10/1 3:00:21

6款论文降AI率网站亲测:键清零AI痕迹,这款性价比封神

2026年毕业季临近&#xff0c;知网、维普两大国内核心学术平台已完成AIGC检测算法的全面迭代升级&#xff1a;知网将AI检测模型更新至3.0版本&#xff0c;实现句子级精准识别&#xff0c;对AI生成内容的识别能力提升15-18个百分点&#xff1b;维普则重构检测逻辑&#xff0c;新…

作者头像 李华
网站建设 2026/10/1 3:00:05

RL-算法演进史05:Model-Based强化学习算法演进路线02

下一节: 5.6 E2C(Embed to Control):深度Latent Dynamics路线 重点分析: 为什么PILCO无法处理视觉输入; E2C如何将高维图像压缩到latent空间; Latent Dynamics如何成为Dreamer路线基础; E2C、PlaNet、Dreamer之间的数学关系。 继续 5.6 E2C(Embed to Control):深度…

作者头像 李华