Initial commit

This commit is contained in:
2026-05-12 09:41:56 +08:00
commit 572283e101
936 changed files with 133949 additions and 0 deletions
+668
View File
@@ -0,0 +1,668 @@
# 第1章 强化学习基础
## 1.1 强化学习概述
**强化学习(reinforcement learningRL**讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。如图 1.1 所示,强化学习由两部分组成:智能体和环境。在强化学习过程中,智能体与环境一直在交互。智能体在环境中获取某个状态后,它会利用该状态输出一个动作 (action),这个动作也称为决策(decision)。然后这个动作会在环境中被执行,环境会根据智能体采取的动作,输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中获取奖励。
<div align=center>
<img width="550" src="../img/ch1/1.1.png"/>
</div>
<div align=center>图 1.1 强化学习示意</div>
### 1.1.1 强化学习与监督学习
我们可以把强化学习与监督学习做一个对比。以图片分类为例,如图 1.2 所示,**监督学习(supervised learning**假设我们有大量被标注的数据,比如汽车、飞机、椅子这些被标注的图片,这些图片都要满足独立同分布,即它们之间是没有关联关系的。假设我们训练一个分类器,比如神经网络。为了分辨输入的 图片中是汽车还是飞机,在训练过程中,需要把正确的标签信息传递给神经网络。 当神经网络做出错误的预测时,比如输入汽车的图片,它预测出来是飞机,我们就会直接告诉它,该预测是错误的,正确的标签应该是汽车。最后我们根据类似错误写出一个损失函数(loss function),通过反向传播(back propagation)来训练神经网络。
<div align=center>
<img width="650" src="../img/ch1/1.2.png"/>
</div>
<div align=center>图 1.2 监督学习</div>
所以在监督学习过程中,有两个假设:
* 输入的数据(标注的数据)都应是没有关联的。因为如果输入的数据有关联,学习器(learner)是不好学习的。
* 需要告诉学习器正确的标签是什么,这样它可以通过正确的标签来修正自己的预测。
> 通常假设样本空间中全体样本服从一个未知分布,我们获得的每个样本都是独立地从这个分布上采样获得的,即独立同分布(independent and identically distributed,简称 i.i.d.)。
在强化学习中,监督学习的两个假设其实都不能得到满足。以雅达利(Atari) 游戏 Breakout 为例,如图 1.3 所示,这是一个打砖块的游戏,控制木板左右移动从而把球反弹到上面来消除砖块。在玩游戏的过程中,我们可以发现智能体得到的观测(observation)不是独立同分布的,上一帧与下一帧间其实有非常强的连续性。我们得到的数据是相关的时间序列数据,不满足独立同分布。另外,我们并没有立刻获得反馈,游戏没有告诉我们哪个动作是正确动作。比如现在把木板往右移,这只会使得球往上或者往左一点儿,我们并不会得到即时的反馈。因此,强化学习之所以困难,是因为智能体不能得到即时的反馈,然而我们依然希望智能体在这个环境中学习。
<div align=center>
<img width="350" src="../img/ch1/1.3.png"/>
</div>
<div align=center>图 1.3 雅达利游戏Breakout</div>
如图 1.4 所示,强化学习的训练数据就是一个玩游戏的过程。我们从第 1 步开始,采取一个动作,比如我们把木板往右移,接到球。第 2 步我们又做出动作,得到的训练数据是一个玩游戏的序列。比如现在是在第 3 步,我们把这个序列放进网络,希望网络可以输出一个动作,即在当前的状态应该输出往右移或 者往左移。这里有个问题,我们没有标签来说明现在这个动作是正确还是错误的,必须等到游戏结束才可能知道,这个游戏可能 10s 后才结束。现在这个动作到底对最后游戏是否能赢有无帮助,我们其实是不清楚的。这里我们就面临**延迟奖励(delayed reward)**的问题,延迟奖励使得训练网络非常困难。
<div align=center>
<img width="500" src="../img/ch1/1.4.png"/>
</div>
<div align=center>图 1.4 强化学习:玩Breakout</div>
强化学习和监督学习的区别如下。
(1)强化学习输入的样本是序列数据,而不像监督学习里面样本都是独立的。
(2)学习器并没有告诉我们每一步正确的动作应该是什么,学习器需要自己去发现哪些动作可以带来 最多的奖励,只能通过不停地尝试来发现最有利的动作。
(3)智能体获得自己能力的过程,其实是不断地试错探索(trial-and-error exploration)的过程。探索 exploration)和利用(exploitation)是强化学习里面非常核心的问题。其中,探索指尝试一些新的动作, 这些新的动作有可能会使我们得到更多的奖励,也有可能使我们“一无所有”;利用指采取已知的可以获得最多奖励的动作,重复执行这个动作,因为我们知道这样做可以获得一定的奖励。因此,我们需要在探索和利用之间进行权衡,这也是在监督学习里面没有的情况。
(4)在强化学习过程中,没有非常强的监督者(supervisor),只有**奖励信号(reward signal**),并且奖励信号是延迟的,即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得 到即时反馈,所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后,如果我们使用监督学习,我们就可以立刻获得一个指导,比如,我们现在采取了一个错误的动作,正确的动作应该是什么。而在强化学习里面,环境可能会告诉我们这个动作是错误的,但是它并没有告诉我们正确的动作是什么。而且更困难的是,它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方。
通过与监督学习的比较,我们可以总结出强化学习的一些特征。
(1)强化学习会试错探索,它通过探索环境来获取对环境的理解。
(2)强化学习智能体会从环境里面获得延迟的奖励。
(3)在强化学习的训练过程中,时间非常重要。因为我们得到的是有时间关联的数据(sequential data), 而不是独立同分布的数据。在机器学习中,如果观测数据有非常强的关联,会使得训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量满足独立同分布,这样就可以消除数据之间的相关性。
(4)智能体的动作会影响它随后得到的数据,这一点是非常重要的。在训练智能体的过程中,很多时 候我们也是通过正在学习的智能体与环境交互来得到数据的。所以如果在训练过程中,智能体不能保持稳定,就会使我们采集到的数据非常糟糕。我们通过数据来训练智能体,如果数据有问题,整个训练过程就会失败。所以在强化学习里面一个非常重要的问题就是,怎么让智能体的动作一直稳定地提升。
### 1.1.2 强化学习的例子
为什么我们关注强化学习,其中非常重要的一个原因就是强化学习得到的模型可以有超人类的表现。 监督学习获取的监督数据,其实是人来标注的,比如 ImageNet 的图片的标签都是人类标注的。因此我们 可以确定监督学习算法的上限(upper bound)就是人类的表现,标注结果决定了它的表现永远不可能超越人类。但是对于强化学习,它在环境里面自己探索,有非常大的潜力,它可以获得超越人类的能力的表现,比如 DeepMind 的 AlphaGo 这样一个强化学习的算法可以把人类顶尖的棋手打败。
这里给大家举一些在现实生活中强化学习的例子。
(1)在自然界中,羚羊其实也在做强化学习。它刚刚出生的时候,可能都不知道怎么站立,然后它通过试错,一段时间后就可以跑得很快,可以适应环境。
(2)我们也可以把股票交易看成强化学习的过程。我们可以不断地买卖股票,然后根据市场给出的反馈来学会怎么去买卖可以让我们的奖励最大化。
(3)玩雅达利游戏或者其他电脑游戏,也是一个强化学习的过程,我们可以通过不断试错来知道怎么 玩才可以通关。
图 1.5 所示为强化学习的一个经典例子,即雅达利的 Pong 游戏。游戏中右边的选手把球拍到左边, 然后左边的选手需要把球拍到右边。训练好的强化学习智能体和正常的选手有区别:强化学习的智能体会一直做无意义的振动,而正常的选手不会做出这样的动作。
<div align=center>
<img width="350" src="../img/ch1/1.9.png"/>
</div>
<div align=center>图 1.5 Pong游戏</div>
在 Pong 游戏里面,其实只有两个动作:往上或者往下。如图 1.6 所示,如果强化学习通过学习一个策略网络来进行分类,那么策略网络会输入当前帧的图片,输出所有决策的可能性,比如往上移动的概率。
<div align=center>
<img width="450" src="../img/ch1/1.10.png"/>
</div>
<div align=center>图 1.6 强化学习玩 Pong</div>
如图 1.7 所示,对于监督学习,我们可以直接告诉智能体正确动作的标签是什么。但在 Pong 游戏中, 我们并不知道它的正确动作的标签是什么。
<div align=center>
<img width="500" src="../img/ch1/1.11.png"/>
</div>
<div align=center>图 1.7 监督学习玩 Pong</div>
在强化学习里面,我们让智能体尝试玩 Pong 游戏,对动作进行采样,直到游戏结束,然后对每个动作进行惩罚。图 1.8 所示为预演(rollout)的一个过程。预演是指我们从当前帧对动作进行采样,生成很多局游戏。我们将当前的智能体与环境交互,会得到一系列观测。每一个观测可看成一个轨迹(trajectory)。 轨迹就是当前帧以及它采取的策略,即状态和动作的序列:
$$
\tau=\left(s_{0}, a_{0}, s_{1}, a_{1}, \ldots\right)
$$
最后结束时,我们会知道到底有没有把这个球拍到对方区域,对方有没有接住,我们是赢了还是输了。我们可以通过观测序列以及最终奖励(eventual reward)来训练智能体,使它尽可能地采取可以获得最终奖励的动作。一场游戏称为一个**回合(episode**或者**试验(trial**。
<div align=center>
<img width="500" src="../img/ch1/1.13.png"/>
</div>
<div align=center>图 1.8 可能的预演序列</div>
### 1.1.3 强化学习的历史
强化学习是有一定的历史的,早期的强化学习,我们称其为标准强化学习。最近业界把强化学习与深度学习结合起来,就形成了深度强化学习(deep reinforcement learning),因此,深度强化学习 = 深度学习 + 强化学习。我们可将标准强化学习和深度强化学习类比于传统的计算机视觉和深度计算机视觉。
如图 1.9a 所示,传统的计算机视觉由两个过程组成。
(1)给定一张图片,我们先要提取它的特征,使用一些设计好的特征,比如方向梯度直方图(histogram of oriental gradientHOG)、可变现的组件模型(deformable part modelDPM)。
(2)提取这些特征后,我们再单独训练一个分类器。这个分类器可以是支持向量机(support vector machineSVM)或 Boosting,然后就可以辨别这张图片是狗还是猫。
<div align=center>
<img width="500" src="../img/ch1/1.14a.png"/>
</div>
<div align=center>a)传统的计算机视觉 </div>
<div align=center>
<img width="500" src="../img/ch1/1.14b.png"/>
</div>
<div align=center>b)深度计算机视觉</div>
<div align=center>图 1.9 传统的计算机视觉与深度计算机视觉的区别</div>
2012年,Krizhevsky等人提出了AlexNetAlexNet在ImageNet分类比赛中取得冠军,迅速引起了人们对于卷积神经网络的广泛关注。
大家就把特征提取以及分类两者合到一块儿去了,就是训练一个神经网络。这个神经网络既可以做特征提取,也可以做分类,它可以实现端到端训练,如图 1.9b 所示,它的参数可以在每一个阶段都得到极大的优化,这是一个非常重要的突破。
我们可以把神经网络放到强化学习里面。
* 标准强化学习:比如 TD-Gammon 玩 Backgammon 游戏的过程,其实就是设计特征,然后训练价值函数的过程,如图 1.10a 所示。标准强化学习先设计很多特征,这些特征可以描述现在整个状态。 得到这些特征后,我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作。
* 深度强化学习:自从我们有了深度学习,有了神经网络,就可以把智能体玩游戏的过程改进成一个端到端训练(end-to-end training)的过程,如图 1.10b 所示。我们不需要设计特征,直接输入状态就可以输出动作。我们可以用一个神经网络来拟合价值函数或策略网络,省去特征工程(feature engineering)的过程。
<div align=center>
<img width="550" src="../img/ch1/1.15a.png"/>
</div>
<div align=center>a)标准强化学习</div>
<div align=center>
<img width="550" src="../img/ch1/1.15b.png"/>
</div>
<div align=center>b)深度强化学习</div>
<div align=center>图 1.10 标准强化学习与深度强化学习的区别</div>
### 1.1.4 强化学习的应用
为什么强化学习在这几年有很多的应用,比如玩游戏以及机器人的一些应用,并且可以击败人类的顶尖棋手呢?这有如下几点原因。首先,我们有了更多的算力(computation power),有了更多的 GPU,可 以更快地做更多的试错尝试。其次,通过不同尝试,智能体在环境里面获得了很多信息,然后可以在环境里面取得很大的奖励。最后,我们通过端到端训练把特征提取和价值估计或者决策一起优化,这样就可以 得到一个更强的决策网络。
接下来介绍一些强化学习里面比较有意思的例子,如图 1.11 所示。
1[DeepMind 研发的走路的智能体](https://www.youtube.com/watch?v=gn4nRCC9TwQ)。这个智能体往前走一步,就会得到一个奖励。这个智能体有不同的形态,可以学到很多有意思的功能。比如,像人一样的智能体学习怎么在曲折的道路上往前走。结果 非常有意思,这个智能体会把手举得非常高,因为举手可以让它的身体保持平衡,它就可以更快地在环境里面往前走。而且我们也可以增加环境的难度,加入一些扰动,智能体就会变得更鲁棒。
2[机械臂抓取](https://ai.googleblog.com/2016/03/deep-learning-for-robots-learning-from.html)。因为我们把强化学习应用到机械臂自动抓取需要大量的预演,所以我们可以使用多个机械臂进行训练。分布式系统可以让机械臂尝试抓取不同的物体,盘子里面物体的形状是不同的,这样 就可以让机械臂学到一个统一的动作,然后针对不同的抓取物都可以使用最优的抓取算法。因为抓取的物 体形状的差别很大,所以使用一些传统的抓取算法不能把所有物体都抓起来。传统的抓取算法对每一个物 体都需要建模,这样是非常费时的。但通过强化学习,我们可以学到一个统一的抓取算法,其适用于不同 的物体。
3[OpenAI 的机械臂翻魔方](https://www.youtube.com/watch?v=jwSbzNHGflM)。OpenAI 在 2018 年的时候设计了一款带有“手指”的机械臂,它可以通过翻动手指使得手中的木块达到预期的设定。人的手指其实非常灵活,怎么使得机械臂的手指也具有这 样灵活的能力一直是个问题。OpenAI 先在一个虚拟环境里面使用强化学习对智能体进行训练,再把它应 用到真实的机械臂上。这在强化学习里面是一种比较常用的做法,即我们先在虚拟环境里面得到一个很好 的智能体,然后把它应用到真实的机器人中。这是因为真实的机械臂通常非常容易坏,而且非常贵,一般 情况下没办法大批量地购买。OpenAI 在 2019 年对其机械臂进行了进一步的改进,这个机械臂在改进后 可以玩魔方了。
4[穿衣服的智能体](https://www.youtube.com/watch?v=ixmE5nt2o88)。很多时候我们要在电影或者一些动画中实现人穿衣服的场景,通过手写执行命令让机器人穿衣服非常困难,穿衣服也是一种非常精细的操作。我们可以训练强化学习智能体来实现穿衣 服功能。我们还可以在里面加入一些扰动,智能体可以抵抗扰动。可能会有失败的情况(failure case)出 现,这样智能体就穿不进去衣服。
<div align=center>
<img width="550" src="../img/ch1/1.17.png"/>
</div>
<div align=center>图 1.11 强化学习例子</div>
## 1.2 序列决策
### 1.2.1 智能体与环境
接下来我们介绍**序列决策(sequential decision making**过程。强化学习研究的问题是智能体与环境交互的问题,图 1.12 左边的智能体一直在与图 1.12 右边的环境进行交互。智能体把它的动作输出给环境,环境取得这个动作后会进行下一步,把下一步的观测与这个动作带来的奖励返还给智能体。这样的交互会产生很多观测,智能体的目的是从这些观测之中学到能最大化奖励的策略。
<div align=center>
<img width="550" src="../img/ch1/1.18.png"/>
</div>
<div align=center>图 1.12 智能体和环境</div>
### 1.2.2 奖励
奖励是由环境给的一种标量的反馈信号(scalar feedback signal),这种信号可显示智能体在某一步采取某个策略的表现如何。强化学习的目的就是最大化智能体可以获得的奖励,智能体在环境里面存在的目 的就是最大化它的期望的累积奖励(expected cumulative reward)。不同的环境中,奖励也是不同的。这里给大家举一些奖励的例子。
(1)比如一个象棋选手,他的目的是赢棋,在最后棋局结束的时候,他就会得到一个正奖励(赢)或者负奖励(输)。
(2)在股票管理里面,奖励由股票获取的奖励与损失决定。
(3)在玩雅达利游戏的时候,奖励就是增加或减少的游戏的分数,奖励本身的稀疏程度决定了游戏的难度。
### 1.2.3 序列决策
在一个强化学习环境里面,智能体的目的就是选取一系列的动作来最大化奖励,所以这些选取的动作 必须有长期的影响。但在这个过程里面,智能体的奖励其实是被延迟了的,就是我们现在选取的某一步动作,可能要等到很久后才知道这一步到底产生了什么样的影响。如图 1.13 所示,在玩雅达利的 Pong 游戏时,我们可能只有到最后游戏结束时,才知道球到底有没有被击打过去。过程中我们采取的上升(up)或 下降(down)动作,并不会直接产生奖励。强化学习里面一个重要的课题就是近期奖励和远期奖励的权衡 (trade-off),研究怎么让智能体取得更多的远期奖励。
在与环境的交互过程中,智能体会获得很多观测。针对每一个观测,智能体会采取一个动作,也会得到一个奖励。所以历史是观测、动作、奖励的序列:
$$
H_{t}=o_{1}, a_{1}, r_{1}, \ldots, o_{t}, a_{t}, r_{t}
$$
智能体在采取当前动作的时候会依赖于它之前得到的历史,所以我们可以把整个游戏的状态看成关于这个历史的函数:
$$
S_{t}=f\left(H_{t}\right)
$$
<div align=center>
<img width="550" src="../img/ch1/1.21.png"/>
</div>
<div align=center>图 1.13 玩Pong游戏</div>
Q:状态和观测有什么关系?
A:**状态**是对世界的完整描述,不会隐藏世界的信息。**观测**是对状态的部分描述,可能会遗漏一些信息。在深度强化学习中,我们几乎总是用实值的向量、矩阵或者更高阶的张量来表示状态和观测。例如, 我们可以用 RGB 像素值的矩阵来表示一个视觉的观测,可以用机器人关节的角度和速度来表示一个机器 人的状态。
环境有自己的函数$s_{t}^{e}=f^{e}\left(H_{t}\right)$ 来更新状态,在智能体的内部也有一个函数$s_{t}^{a}=f^{a}\left(H_{t}\right)$来更新状 态。当智能体的状态与环境的状态等价的时候,即当智能体能够观察到环境的所有状态时,我们称这个环境是完全可观测的(fully observed)。在这种情况下面,强化学习通常被建模成一个马尔可夫决策过程 (Markov decision processMDP)的问题。在马尔可夫决策过程中,$o_{t}=s_{t}^{e}=s_{t}^{a}$。
但是有一种情况是智能体得到的观测并不能包含环境运作的所有状态,因为在强化学习的设定里面, 环境的状态才是真正的所有状态。比如智能体在玩 black jack 游戏,它能看到的其实是牌面上的牌。或者在 玩雅达利游戏的时候,观测到的只是当前电视上面这一帧的信息,我们并没有得到游戏内部里面所有的运 作状态。也就是当智能体只能看到部分的观测,我们就称这个环境是部分可观测的(partially observed)。 在这种情况下,强化学习通常被建模成**部分可观测马尔可夫决策过程(partially observable Markov decision process, POMDP**的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。 部分可观测马尔可夫决策过程依然具有马尔可夫性质,但是假设智能体无法感知环境的状态,只能知道 部分观测值。比如在自动驾驶中,智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述:$(S,A,T,R,\Omega,O,\gamma)$。其中 $S$ 表示状态空间,为隐变量,$A$ 为动作空间,$T(s'|s,a)$ 为状态转移概率,$R$ 为奖励函数,$\Omega(o|s,a)$ 为观测概率,$O$ 为观测空间,$\gamma$ 为折扣系数。
## 1.3 动作空间
不同的环境允许不同种类的动作。在给定的环境中,有效动作的集合经常被称为动作空间(action space)。像雅达利游戏和围棋(Go)这样的环境有离散动作空间(discrete action space),在这个动作 空间里,智能体的动作数量是有限的。在其他环境,比如在物理世界中控制一个智能体,在这个环境中就有连续动作空间(continuous action space)。在连续动作空间中,动作是实值的向量。
例如,走迷宫机器人如果只有往东、往南、往西、往北这 4 种移动方式,则其动作空间为离散动作空 间;如果机器人可以向 360 度中的任意角度进行移动,则其动作空间为连续动作空间。
## 1.4 强化学习智能体的组成成分和类型
对于一个强化学习智能体,它可能有一个或多个如下的组成成分。
* **策略(policy)**。智能体会用策略来选取下一步的动作。
* **价值函数(value function)**。我们用价值函数来对当前状态进行评估。价值函数用于评估智能体进 入某个状态后,可以对后面的奖励带来多大的影响。价值函数值越大,说明智能体进入这个状态越有利。
* **模型(model)**。模型表示智能体对环境的状态进行理解,它决定了环境中世界的运行方式。 下面我们深入了解这 3 个组成部分的细节。
### 1.4.1 策略
策略是智能体的动作模型,它决定了智能体的动作。它其实是一个函数,用于把输入的状态变成动作。策略可分为两种:随机性策略和确定性策略。
**随机性策略(stochastic policy**就是 $\pi$ 函数,即$\pi(a | s)=p\left(a_{t}=a | s_{t}=s\right)$。输入一个状态 $s$,输出一个概率。
这个概率是智能体所有动作的概率,然后对这个概率分布进行采样,可得到智能体将采取的动作。比如可能是有 0.7 的概率往左,0.3 的概率往右,那么通过采样就可以得到智能体将采取的动作。
**确定性策略(deterministic policy**就是智能体直接采取最有可能的动作,即 $a^{*}=\underset{a}{\arg \max} \pi(a \mid s)$。
如图 1.14 所示,从雅达利游戏来看,策略函数的输入就是游戏的一帧,它的输出决定智能体向左移动或者向右移动。
<div align=center>
<img width="550" src="../img/ch1/1.26.png"/>
</div>
<div align=center>图 1.14 策略函数</div>
通常情况下,强化学习一般使用随机性策略,随机性策略有很多优点。比如,在学习时可以通过引入一定的随机性来更好地探索环境;
随机性策略的动作具有多样性,这一点在多个智能体博弈时非常重要。采用确定性策略的智能体总是对同样的状态采取相同的动作,这会导致它的策略很容易被对手预测。
### 1.4.2 价值函数
价值函数的值是对未来奖励的预测,我们用它来评估状态的好坏。
价值函数里面有一个**折扣因子(discount factor)**,我们希望在尽可能短的时间里面得到尽可能多的奖励。比如现在给我们两个选择:10天后给我们100块钱或者现在给我们100块钱。我们肯定更希望现在就给我们 100 块钱,因为我们可以把这 100 块钱存在银行里面,这样就会有一些利息。因此,我们可以把折扣因子放到价值函数的定义里面,价值函数的定义为
$$
V_{\pi}(s) \doteq \mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s\right]=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} r_{t+k+1} \mid s_{t}=s\right], \text{对于所有的} s \in S
$$
期望 $\mathbb{E}_{\pi}$ 的下标是 $\pi$ 函数,$\pi$ 函数的值可反映在我们使用策略 $\pi$ 的时候,到底可以得到多少奖励。
我们还有一种价值函数:Q 函数。Q 函数里面包含两个变量:状态和动作。其定义为
$$
Q_{\pi}(s, a) \doteq \mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s, a_{t}=a\right]=\mathbb{E}_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} r_{t+k+1} \mid s_{t}=s, a_{t}=a\right]
$$
所以我们未来可以获得奖励的期望取决于当前的状态和当前的动作。Q 函数是强化学习算法里面要学习的一个函数。因为当我们得到 Q 函数后,进入某个状态要采取的最优动作可以通过 Q 函数得到。
### 1.4.3 模型
第3个组成部分是模型,模型决定了下一步的状态。下一步的状态取决于当前的状态以及当前采取的动作。它由状态转移概率和奖励函数两个部分组成。状态转移概率即
$$
p_{s s^{\prime}}^{a}=p\left(s_{t+1}=s^{\prime} \mid s_{t}=s, a_{t}=a\right)
$$
奖励函数是指我们在当前状态采取了某个动作,可以得到多大的奖励,即
$$
R(s,a)=\mathbb{E}\left[r_{t+1} \mid s_{t}=s, a_{t}=a\right]
$$
当我们有了策略、价值函数和模型3个组成部分后,就形成了一个**马尔可夫决策过程(Markov decision process**。如图 1.15 所示,这个决策过程可视化了状态之间的转移以及采取的动作。
<div align=center>
<img width="550" src="../img/ch1/1.29.png"/>
</div>
<div align=center>图 1.15 马尔可夫决策过程</div>
我们来看一个走迷宫的例子。如图 1.16 所示,要求智能体从起点(start)开始,然后到达终点(goal)的位置。每走一步,我们就会得到 $-$1 的奖励。我们可以采取的动作是往上、下、左、右走。我们用现在智能体所在的位置来描述当前状态。
<div align=center>
<img width="550" src="../img/ch1/1.30.png"/>
</div>
<div align=center>图 1.16 走迷宫的例子</div>
我们可以用不同的强化学习方法来解这个环境。
如果我们采取基于策略的强化学习(policy-based RL)方法,当学习好了这个环境后,在每一个状态,我们都会得到一个最佳的动作。如图 1.17 所示,比如我们现在在起点位置,我们知道最佳动作是往右走;在第二格的时候,得到的最佳动作是往上走;第三格是往右走......通过最佳的策略,我们可以最快地到达终点。
<div align=center>
<img width="550" src="../img/ch1/1.31.png"/>
</div>
<div align=center>图 1.17 使用基于策略的强化学习方法得到的结果</div>
如果换成基于价值的强化学习(value-based RL)方法,利用价值函数作为导向,我们就会得到另外一种表征,每一个状态会返回一个价值。如图 1.18 所示,比如我们在起点位置的时候,价值是 $-$16,因为我们最快可以 16 步到达终点。因为每走一步会减1,所以这里的价值是 $-$16。
当我们快接近终点的时候,这个数字变得越来越大。在拐角的时候,比如现在在第二格,价值是$-$15,智能体会看上、下两格,它看到上面格子的价值变大了,变成 $-$14 了,下面格子的价值是 $-$16,那么智能体就会采取一个往上走的动作。所以通过学习的价值的不同,我们可以抽取出现在最佳的策略。
<div align=center>
<img width="550" src="../img/ch1/1.32.png"/>
</div>
<div align=center>图 1.18 使用基于价值的强化学习方法得到的结果</div>
### 1.4.4 强化学习智能体的类型
#### 1.基于价值的智能体与基于策略的智能体
根据智能体学习的事物不同,我们可以把智能体进行归类。**基于价值的智能体(value-based agent)**显式地学习价值函数,隐式地学习它的策略。策略是其从学到的价值函数里面推算出来的。**基于策略的智能体(policy-based agent)**直接学习策略,我们给它一个状态,它就会输出对应动作的概率。基于策略的智能体并没有学习价值函数。把基于价值的智能体和基于策略的智能体结合起来就有了**演员-评论员智能体(actor-critic agent)**。这一类智能体把策略和价值函数都学习了,然后通过两者的交互得到最佳的动作。
Q: 基于策略和基于价值的强化学习方法有什么区别?
A: 对于一个状态转移概率已知的马尔可夫决策过程,我们可以使用动态规划算法来求解。从决策方式来看,强化学习又可以划分为基于策略的方法和基于价值的方法。决策方式是智能体在给定状态下从动作集合中选择一个动作的依据,它是静态的,不随状态变化而变化。
在基于策略的强化学习方法中,智能体会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励。
而在基于价值的强化学习方法中,智能体不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于动作集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作)。
基于价值的强化学习算法有Q学习(Q-learning)、 Sarsa 等,而基于策略的强化学习算法有策略梯度(Policy Gradient,PG)算法等。此外,演员-评论员算法同时使用策略和价值评估来做出决策。其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。
#### 2.有模型强化学习智能体与免模型强化学习智能体
另外,我们可以通过智能体到底有没有学习环境模型来对智能体进行分类。
**有模型(model-based)**强化学习智能体通过学习状态的转移来采取动作。
**免模型(model-free)**强化学习智能体没有去直接估计状态的转移,也没有得到环境的具体转移变量,它通过学习价值函数和策略函数进行决策。免模型强化学习智能体的模型里面没有环境转移的模型。
我们可以用马尔可夫决策过程来定义强化学习任务,并将其表示为四元组 $<S,A,P,R>$,即状态集合、动作集合、状态转移函数和奖励函数。如果这个四元组中所有元素均已知,且状态集合和动作集合在有限步数内是有限集,则智能体可以对真实环境进行建模,构建一个虚拟世界来模拟真实环境中的状态和交互反应。
具体来说,当智能体知道状态转移函数 $P(s_{t+1}|s_t,a_t)$ 和奖励函数 $R(s_t,a_t)$ 后,它就能知道在某一状态下执行某一动作后能带来的奖励和环境的下一状态,这样智能体就不需要在真实环境中采取动作,直接在虚拟世界中学习和规划策略即可。这种学习方法称为**有模型强化学习**。
有模型强化学习的流程如图 1.19 所示。
<div align=center>
<img width="550" src="../img/ch1/1.35.png"/>
</div>
<div align=center>图 1.19 有模型强化学习流程</div>
然而在实际应用中,智能体并不是那么容易就能知晓马尔可夫决策过程中的所有元素的。通常情况下,状态转移函数和奖励函数很难估计,甚至连环境中的状态都可能是未知的,这时就需要采用免模型强化学习。免模型强化学习没有对真实环境进行建模,智能体只能在真实环境中通过一定的策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新动作策略,这样反复迭代直到学习到最优策略。
Q:有模型强化学习和免模型强化学习有什么区别?
A:针对是否需要对真实环境建模,强化学习可以分为有模型强化学习和免模型强化学习。有模型强化学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;免模型强化学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。
总之,有模型强化学习相比免模型强化学习仅仅多出一个步骤,即对真实环境进行建模。因此,一些有模型的强化学习方法,也可以在免模型的强化学习方法中使用。在实际应用中,如果不清楚该用有模型强化学习还是免模型强化学习,可以先思考在智能体执行动作前,是否能对下一步的状态和奖励进行预测,如果能,就能够对环境进行建模,从而采用有模型学习。
免模型强化学习通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。例如,在雅达利平台上的《太空侵略者》游戏中,免模型的深度强化学习需要大约两亿帧游戏画面才能学到比较理想的效果。相比之下,有模型的深度强化学习可以在一定程度上缓解训练数据匮乏的问题,因为智能体可以在虚拟世界中进行训练。
免模型学习的泛化性要优于有模型强化学习,原因是有模型强化学习算需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了有模型强化学习算法的泛化性。
有模型的强化学习方法可以对环境建模,使得该类方法具有独特魅力,即“想象能力”。在免模型强化学习中,智能体只能一步一步地采取策略,等待真实环境的反馈;有模型强化学习可以在虚拟世界中预测出将要发生的事,并采取对自己最有利的策略。
目前,大部分深度强化学习方法都采用了免模型强化学习,这是因为:免模型强化学习更为简单、直观且有丰富的开源资料,如 AlphaGo 系列都采用免模型强化学习;在目前的强化学习研究中,大部分情况下环境都是静态的、可描述的,智能体的状态是离散的、可观察的(如雅达利游戏平台),这种相对简单、确定的问题并不需要评估状态转移函数和奖励函数,可直接采用免模型强化学习,使用大量的样本进行训练就能获得较好的效果。
如图 1.20 所示,我们可以把几类模型放到同一个图里面。图 1.20 有3个组成成分:价值函数、策略和模型。按一个智能体具有三者中的三者、两者或一者的情况可以把它分成很多类。
<div align=center>
<img width="550" src="../img/ch1/1.36.png"/>
</div>
<div align=center>图 1.20 强化学习智能体的类型</div>
## 1.5 学习与规划
学习(learning)和规划(planning)是序列决策的两个基本问题。
如图 1.21 所示,在强化学习中,环境初始时是未知的,智能体不知道环境如何工作,它通过不断地与环境交互,逐渐改进策略。
<div align=center>
<img width="550" src="../img/ch1/learning.png"/>
</div>
<div align=center>图 1.21 学习</div>
如图 1.22 所示,在规划中,环境是已知的,智能体被告知了整个环境的运作规则的详细信息。智能体能够计算出一个完美的模型,并且在不需要与环境进行任何交互的时候进行计算。智能体不需要实时地与环境交互就能知道未来环境,只需要知道当前的状态,就能够开始思考,来寻找最优解。
在图 1.22 所示的游戏中,规则是确定的,我们知道选择左之后环境将会产生什么变化。我们完全可以通过已知的规则,来在内部模拟整个决策过程,无需与环境交互。
一个常用的强化学习问题解决思路是,先学习环境如何工作,也就是了解环境工作的方式,即学习得到一个模型,然后利用这个模型进行规划。
<div align=center>
<img width="550" src="../img/ch1/planning.png"/>
</div>
<div align=center>图 1.22 规划</div>
## 1.6 探索和利用
在强化学习里面,探索和利用是两个很核心的问题。
探索即我们去探索环境,通过尝试不同的动作来得到最佳的策略(带来最大奖励的策略)。
利用即我们不去尝试新的动作,而是采取已知的可以带来很大奖励的动作。
在刚开始的时候,强化学习智能体不知道它采取了某个动作后会发生什么,所以它只能通过试错去探索,所以探索就是通过试错来理解采取的动作到底可不可以带来好的奖励。利用是指我们直接采取已知的可以带来很好奖励的动作。所以这里就面临一个权衡问题,即怎么通过牺牲一些短期的奖励来理解动作,从而学习到更好的策略。
下面举一些探索和利用的例子。
以选择餐馆为例,利用是指我们直接去我们最喜欢的餐馆,因为我们去过这个餐馆很多次了,所以我们知道这里面的菜都非常可口。
探索是指我们用手机搜索一个新的餐馆,然后去尝试它的菜到底好不好吃。我们有可能对这个新的餐馆感到非常不满意,这样钱就浪费了。
以做广告为例,利用是指我们直接采取最优的广告策略。探索是指我们换一种广告策略,看看这个新的广告策略可不可以得到更好的效果。
以挖油为例,利用是指我们直接在已知的地方挖油,这样可以确保挖到油。
探索是指我们在一个新的地方挖油,这样就有很大的概率可能不能发现油田,但也可能有比较小的概率可以发现一个非常大的油田。
以玩游戏为例,利用是指我们总是采取某一种策略。比如,我们玩《街头霸王》游戏的时候,采取的策略可能是蹲在角落,然后一直出脚。这个策略很可能可以奏效,但可能遇到特定的对手就会失效。
探索是指我们可能尝试一些新的招式,有可能我们会放出“大招”来,这样就可能“一招毙命”。
与监督学习任务不同,强化学习任务的最终奖励在多步动作之后才能观察到,这里我们不妨先考虑比较简单的情形:最大化单步奖励,即仅考虑一步动作。需注意的是,即便在这样的简单情形下,强化学习仍与监督学习有显著不同,因为智能体需通过试错来发现各个动作产生的结果,而没有训练数据告诉智能体应当采取哪个动作。
想要最大化单步奖励需考虑两个方面:一是需知道每个动作带来的奖励,二是要执行奖励最大的动作。若每个动作对应的奖励是一个确定值,那么尝试遍所有的动作便能找出奖励最大的动作。然而,更一般的情形是,一个动作的奖励值是来自一个概率分布,仅通过一次尝试并不能确切地获得平均奖励值。
实际上,单步强化学习任务对应于一个理论模型,即**$K$-臂赌博机($K$-armed bandit**。 $K$-臂赌博机也被称为**多臂赌博机(multi-armed bandit** 。如图 1.23 所示,$K$-臂赌博机有 $K$ 个摇臂,赌徒在投入一个硬币后可选择按下其中一个摇臂,每个摇臂以一定的概率吐出硬币,但这个概率赌徒并不知道。赌徒的目标是通过一定的策略最大化自己的奖励,即获得最多的硬币。
若仅为获知每个摇臂的期望奖励,则可采用**仅探索(exploration-only)法**:将所有的尝试机会平均分配给每个摇臂(即轮流按下每个摇臂),最后以每个摇臂各自的平均吐币概率作为其奖励期望的近似估计。若仅为执行奖励最大的动作,则可采用**仅利用(exploitation-only)法**:按下目前最优的(即到目前为止平均奖励最大的)摇臂,若有多个摇臂同为最优,则从中随机选取一个。
显然,仅探索法能很好地估计每个摇臂的奖励,却会失去很多选择最优摇臂的机会;仅利用法则相反,它没有很好地估计摇臂期望奖励,很可能经常选不到最优摇臂。因此,这两种方法都难以使最终的累积奖励最大化。
事实上,探索(估计摇臂的优劣)和利用(选择当前最优摇臂)这两者是矛盾的,因为尝试次数(总投币数)有限,加强了一方则自然会削弱另一方,这就是强化学习所面临的**探索-利用窘境(exploration-exploitation dilemma**。显然,想要累积奖励最大,则必须在探索与利用之间达成较好的折中。
<div align=center>
<img width="300" src="../img/ch1/1.39.png"/>
</div>
<div align=center>图 1.23 <i>K</i>-臂赌博机图示</div>
## 1.7 强化学习实验
强化学习是一个理论与实践相结合的机器学习分支,我们不仅要理解它算法背后的一些数学原理,还要通过上机实践实现算法。在很多实验环境里面去探索算法能不能得到预期效果也是一个非常重要的过程。
我们可以使用 Python 和深度学习的一些包来实现强化学习算法。现在有很多深度学习的包可以使用,比如 PyTorch、TensorFlow、Keras,熟练使用其中的两三种,就可以实现非常多的功能。所以我们并不需要从头去“造轮子”。
### 1.7.1 Gym
OpenAI是一家非营利性的人工智能研究公司,其公布了非常多的学习资源以及算法资源。其之所以叫作 OpenAI,他们把所有开发的算法都进行了开源。
如图 1.24 所示,OpenAI 的 **Gym库**是一个环境仿真库,里面包含很多现有的环境。针对不同的场景,我们可以选择不同的环境。离散控制场景(输出的动作是可数的,比如Pong游戏中输出的向上或向下动作)一般使用雅达利环境评估;连续控制场景(输出的动作是不可数的,比如机器人走路时不仅有方向,还有角度,角度就是不可数的,是一个连续的量 )一般使用 MuJoCo 环境评估。**Gym Retro**是对 Gym 环境的进一步扩展,包含更多的游戏。
<div align=center>
<img width="550" src="../img/ch1/1.44.png"/>
</div>
<div align=center>图 1.24 OpenAI 的 Gym 库</div>
我们可以通过 pip 来安装 Gym 库,由于 Gym 库 0.26.0 及其之后的版本对之前的代码不兼容,所以我们安装 0.26.0 之前的 Gym,比如 0.25.2。
```bash
pip install gym==0.25.2
```
此外,为了显示图形界面,我们还需要安装 pygame 库。
```bash
pip install pygame
```
在 Python 环境中导入Gym库,如果不报错,就可以认为 Gym 库安装成功。
```bash
$python
>>>import gym
```
比如我们现在安装了Gym库,就可以直接调入Taxi-v3的环境。初始化这个环境后,我们就可以进行交互了。智能体得到某个观测后,它就会输出一个动作。这个动作会被环境拿去执行某个步骤 ,然后环境就会往前走一步,返回新的观测、奖励以及一个 flag 变量 done,done 决定这个游戏是不是结束了。我们通过几行代码就可实现强化学习的框架:
```python
import gym
env = gym.make("Taxi-v3")
observation = env.reset()
agent = load_agent()
for step in range(100):
action = agent(observation)
observation, reward, done, info = env.step(action)
```
>上面这段代码只是示例,其目的是让读者了解强化学习算法代码实现的框架,并非完整代码,load\_agent 函数并未定义,所以运行这段代码会报错。
如图 1.25 所示,Gym 库里面有很多经典的控制类游戏。比如 Acrobot需要让一个双连杆机器人立起来;CartPole需要通过控制一辆小车,让杆立起来;MountainCar需要通过前后移动车,让它到达旗帜的位置。在刚开始测试强化学习的时候,我们可以选择这些简单环境,因为强化学习在这些环境中可以在一两分钟之内见到效果。
<div align=center>
<img width="550" src="../img/ch1/1.46.png"/>
</div>
<div align=center>图1.25 经典控制问题</div>
大家可以点[这个链接](https://www.gymlibrary.dev/environments/classic_control/)看一看这些环境。在刚开始测试强化学习的时候,可以选择这些简单环境,因为这些环境可以在一两分钟之内见到一个效果。
如图 1.26 所示,CartPole-v0 环境有两个动作:将小车向左移动和将小车向右移动。我们还可以得到观测:小车当前的位置,小车当前往左、往右移的速度,杆的角度以及杆的最高点(顶端)的速度。
观测越详细,我们就可以更好地描述当前所有的状态。这里有奖励的定义,如果能多走一步,我们就会得到一个奖励(奖励值为1),所以我们需要存活尽可能多的时间来得到更多的奖励。当杆的角度大于某一个角度(没能保持平衡),或者小车的中心到达图形界面窗口的边缘,或者累积步数大于200,游戏就结束了。所以智能体的目的是控制杆,让它尽可能地保持平衡以及尽可能保持在环境的中央。
<div align=center>
<img width="550" src="../img/ch1/1.47.png"/>
</div>
<div align=center>图 1.26 CartPole-v0的例子</div>
```python
import gym # 导入 Gym 的 Python 接口环境包
env = gym.make('CartPole-v0') # 构建实验环境
env.reset() # 重置一个回合
for _ in range(1000):
env.render() # 显示图形界面
action = env.action_space.sample() # 从动作空间中随机选取一个动作
env.step(action) # 用于提交动作,括号内是具体的动作
env.close() # 关闭环境
```
注意:如果绘制了实验的图形界面窗口,那么关闭该窗口的最佳方式是调用 env.close()。试图直接关闭图形界面窗口可能会导致内存不能释放,甚至会导致死机。
当我们执行这段代码时,机器人会驾驶着小车朝某个方向一直跑,直到我们看不见,这是因为我们还没开始训练机器人。
Gym 库中的大部分小游戏都可以用一个普通的实数或者向量来表示动作。输出env.action\_space.sample()的返回值,能看到输出为 1 或者 0。env.action\_space.sample()的含义是,在该游戏的所有动作空间里随机选择一个作为输出。在这个例子中,动作只有两个:0 和 1,一左一右。env.step()方法有4个返回值:observation、reward、done、info 。
observation 是状态信息,是在游戏中观测到的屏幕像素值或者盘面状态描述信息。reward 是奖励值,即动作提交以后能够获得的奖励值。这个奖励值因游戏的不同而不同,但总体原则是,对完成游戏有帮助的动作会获得比较高的奖励值。done 表示游戏是否已经完成,如果完成了,就需要重置游戏并开始一个新的回合。info 是一些比较原始的用于诊断和调试的信息,或许对训练有帮助。不过,OpenAI 在评价我们提交的机器人时,是不允许使用这些信息的。
在每个训练中都要使用的返回值有 observation、reward、done。但 observation 的结构会由于游戏的不同而发生变化。以 CartPole-v0 为例,我们对代码进行修改:
```python
import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
env.render()
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
print(observation)
env.close()
```
输出:
```
[ 0.01653398 0.19114579 0.02013859 -0.28050058]
[ 0.0203569 -0.00425755 0.01452858 0.01846535]
[ 0.02027175 -0.19958481 0.01489789 0.31569658]
......
```
从输出可以看出这是一个四维的观测。在其他游戏中会有维度更多的情况出现。
env.step()完成了一个完整的 $S \to A \to R \to S'$ 过程。我们只要不断观测这样的过程,并让智能体在其中用相应的算法完成训练,就能得到一个高质量的强化学习模型。
Gym 库已注册的环境可以通过以下代码查看:
```python
from gym import envs
env_specs = envs.registry.all()
envs_ids = [env_spec.id for env_spec in env_specs]
print(envs_ids)
```
Gym 库中的每个环境都定义了观测空间和动作空间。观测空间和动作空间可以是离散的(取值为有限个离散的值),也可以是连续的(取值为连续的值)。
### 1.7.2 MountainCar-v0 例子
接下来,我们通过一个例子来学习如何与 Gym 库进行交互。我们选取**小车上山(MountainCar-v0**作为例子。
首先我们来看看这个任务的观测空间和动作空间:
```python
import gym
env = gym.make('MountainCar-v0')
print('观测空间 = {}'.format(env.observation_space))
print('动作空间 = {}'.format(env.action_space))
print('观测范围 = {} ~ {}'.format(env.observation_space.low,
env.observation_space.high))
print('动作数 = {}'.format(env.action_space.n))
```
输出:
```
观测空间 = Box([-1.2 -0.07], [0.6 0.07], (2,), float32)
动作空间 = Discrete(3)
观测范围 = [-1.2 -0.07] ~ [0.6 0.07]
动作数 = 3
```
在 Gym 库中,环境的观测空间用 env.observation\_space 表示,动作空间用 env.action\_space 表示。离散空间 gym.spaces.Discrete 类表示,连续空间用 gym.spaces.Box 类表示。对于离散空间,Discrete (n) 表示可能取值的数量为 n;对于连续空间,Box类实例成员中的 low 和 high 表示每个浮点数的取值范围。MountainCar-v0 中的观测是长度为 2 的 numpy 数组,数组中值的类型为 float。MountainCar-v0 中的动作是整数,取值范围为 {0,1,2}。
接下来实现智能体来控制小车移动,对应代码如下。
```python
class SimpleAgent:
def __init__(self, env):
pass
def decide(self, observation): # 决策
position, velocity = observation
lb = min(-0.09 * (position + 0.25) ** 2 + 0.03,
0.3 * (position + 0.9) ** 4 - 0.008)
ub = -0.07 * (position + 0.38) ** 2 + 0.07
if lb < velocity < ub:
action = 2
else:
action = 0
return action # 返回动作
def learn(self, *args): # 学习
pass
agent = SimpleAgent(env)
```
SimpleAgent 类的 decide()方法用于决策,learn() 方法用于学习,该智能体不是强化学习智能体,不能学习,只能根据给定的数学表达式进行决策。
接下来我们试图让智能体与环境交互,代码如下。
```python
def play(env, agent, render=False, train=False):
episode_reward = 0. # 记录回合总奖励,初始值为0
observation = env.reset() # 重置游戏环境,开始新回合
while True: # 不断循环,直到回合结束
if render: # 判断是否显示
env.render() # 显示图形界面
action = agent.decide(observation)
next_observation, reward, done, _ = env.step(action) # 执行动作
episode_reward += reward # 收集回合奖励
if train: # 判断是否训练智能体
agent.learn(observation, action, reward, done) # 学习
if done: # 回合结束,跳出循环
break
observation = next_observation
return episode_reward # 返回回合总奖励
```
上面代码中的 play 函数可以让智能体和环境交互一个回合,该函数有 4 个参数。env 是环境类。agent 是智能体类。render 是 bool 型变量,其用于判断是否需要图形化显示。如果 render 为 True,则在交互过程中会调用 env.render() 以显示图形界面,通过调用 env.close() 可关闭图形界面。train 是 bool 型变量,其用于判断是否训练智能体,在训练过程中设置为 True,让智能体学习;在测试过程中设置为 False,让智能体保持不变。该函数的返回值 episode\_reward 是 float 型的数值,其表示智能体与环境交互一个回合的回合总奖励。
接下来,我们使用下面的代码让智能体和环境交互一个回合,并显示图形界面。
```python
env.seed(3) # 设置随机种子,让结果可复现
episode_reward = play(env, agent, render=True)
print('回合奖励 = {}'.format(episode_reward))
env.close() # 关闭图形界面
```
输出:
```
回合奖励 = -105.0
```
为了评估智能体的性能,需要计算出连续交互 100 回合的平均回合奖励,代码如下。
```python
episode_rewards = [play(env, agent) for _ in range(100)]
print('平均回合奖励 = {}'.format(np.mean(episode_rewards)))
```
输出:
```
平均回合奖励 = -106.63
```
SimpleAgent 类对应策略的平均回合奖励在 $-$110 左右,而对于小车上山任务,只要连续 100 个回合的平均回合奖励大于 $-$110,就可以认为该任务被解决了。完整代码实现可参考[小车上山代码](https://github.com/datawhalechina/easy-rl/blob/master/docs/chapter1/RL_example.py)。
测试智能体在 Gym 库中某个任务的性能时,出于习惯使然,学术界一般最关心 100 个回合的平均回合奖励。对于有些任务,还会指定一个参考的回合奖励值,当连续 100 个回合的奖励大于指定的值时,则认为该任务被解决了。而对于没有指定值的任务,就无所谓任务被解决了或没有被解决。
我们对 Gym 库的用法进行总结:使用 env=gym.make(环境名)取出环境,使用 env.reset()初始化环境,使用 env.step(动作)执行一步环境,使用 env.render()显示环境,使用 env.close()关闭环境。Gym库 有对应的[官方文档](https://www.gymlibrary.dev/),读者可以阅读文档来学习 Gym库 。
## 参考文献
* [百面深度学习](https://book.douban.com/subject/35043939/)
* [强化学习:原理与Python实现](https://book.douban.com/subject/34478302/)
* [强化学习基础 David Silver 笔记](https://zhuanlan.zhihu.com/c_135909947)
* [David Silver 强化学习公开课中文讲解及实践](https://zhuanlan.zhihu.com/reinforce)
* [UCL Course on RL(David Silver)](https://www.davidsilver.uk/teaching/)
* [白话强化学习与PyTorch](https://book.douban.com/subject/34809676/)
* [OpenAI Spinning Up ](https://spinningup.openai.com/en/latest/spinningup/rl_intro.html#)
* [神经网络与深度学习](https://nndl.github.io/)
* [机器学习](https://book.douban.com/subject/26708119//)
Binary file not shown.
+118
View File
@@ -0,0 +1,118 @@
# 蜂医
游戏《三角洲行动》中的支援型干员
蜂医是2024年琳琅天上发行的《三角洲行动》中的支援型干员之一,在早期版本是唯一一个支援型干员。
蜂医在游戏中能够使用战术装备“激素枪”:远程治疗队友或'自我治疗',还可以使用兵种道具“烟幕无人机”:释放长烟幕,和“蜂巢科技烟雾弹”:产生一团白色烟雾(使用激素枪对烟雾射击换变成绿色烟雾,可起到治疗作用),干员特长为“高效救援”:救援倒地队友时速度更快,在全面战场模式中约1.4秒就能救起队友,且被救起的队友能恢复更多生命值。在烽火地带中,还能够移除队友血量上限减少的负面效果。 \[1-2]****
* 中文名
罗伊•斯米
* 外文名
Roy smee \[2]**
* 别    名
罗伊、蜂医
* 性    别
- 登场作品
[三角洲行动](/item/%E4%B8%89%E8%A7%92%E6%B4%B2%E8%A1%8C%E5%8A%A8/63251542?fromModule=lemma_inlink)
- 生    日
2008年2月23日 \[3]**
- 身    高
176 cm \[3]**
- 体    重
75 kg \[3]**
## 目录
1. 1[角色设定](#1)
2. 2[角色定位](#2)
3. 3[技能](#3)
1) ▪[战术装备 - 激素枪](#3-1)
2) ▪[战术道具 - 烟幕无人机](#3-2)
3) ▪[战术道具 - 蜂巢科技烟雾弹](#3-3)
1. ▪[干员特长 - 高效救援](#3-4)
## 角色设定
三角洲行动:医疗角色蜂医!让你不再为血量担忧
蜂医是游戏中的一名战地医生,拥有丰富的参军履历。
蜂医在干员档案中标明他有一个妻子和女儿。
## 角色定位
-蜂医在团队中主要承担支援和治疗的职责,是团队生存能力的重要保障。他能在激烈的战斗中为队友提供及时的治疗,确保队友保持良好的战斗状态,还能利用烟幕技能为团队创造有利的战术环境,如掩护队友转移、推进或突袭等。
## 技能
### 战术装备 - 激素枪
-可发射多目标追踪子弹,能同时锁定并缓慢治疗多名友方干员,治疗期间还能抑制队友的疼痛感等异常状态。
-开镜时,仅会锁定一个目标。
-全面战场中,开镜瞄准敌人可以扣除敌人20滴血
-长按按键可以对自己进行治疗,在全面战场中,可以恢复自身血量。烽火地带模式中,可以消除自身如骨折的负面效果。
### 战术道具 - 烟幕无人机
-能控制手势感应无人机向前飞行并喷射烟幕,形成一条长15米的烟雾长廊
-无人机飞行时,长按开火键引导无人机转向,可改变烟幕走向,用来分割战场、掩护队友撤退或进攻。
### 战术道具 - 蜂巢科技烟雾弹
-投掷后会在区域内产生一团白色烟雾,可作常规烟雾掩护使用。
-用激素枪向其烟雾射击,能将其染色为绿色的治疗烟雾,使在烟雾中的队友获得缓慢回血效果。
### 干员特长 - 高效救援
-救援倒地队友时速度更快。
-在全面战场模式中大概1.4秒就能救起队友,且被救起的队友不会存在扣血效果,能够恢复至满血。
-在烽火地带中,还能够移除队友血量上限减少的负面效果。
参考资料
* 1
[](#sup-1)
[《三角洲行动》PC/移动今日上线](/reference/65245483/533aYdO6cr3_z3kATKCLyvz3ZnmWYNWt7OfaWrBzzqIPmGapB4rjFJkjrtQw87hkBETK4sgwNIZMxr6sWxla).腾讯游戏 \[引用日期2025-01-20]**
* 2
[](#sup-2)
[《三角洲行动》干员档案-罗伊·斯米——代号:蜂医](/reference/65245483/533aYdO6cr3_z3kATPGIza6jYXqSN9ul6LOGBuNzzqIPmGapB5nyTcYw6ds2_P5rHUXIv5Utdt8Rk-fleC1Eu50Uc-xtRdNUgnm8E26tkOqJqZtux9xHoIldUaQemfHvtlK6hkzJhvWX5WjulmPM4YewIHHGSYAdj4VcVsyHC6syegGFn0a7eVi3FOY).哔哩哔哩.2024-03-16 \[引用日期2025-01-30]**
* 3
[](#sup-3)
[三角洲干员背景小细节,蜂医的女儿是谁?](/reference/65245483/533aYdO6cr3_z3kATKLdz_32YXnEZ9qsu-LUAeNzzqIPmGapB5nyTcYw6ds2_P5rHUXIv5Utdt8Rk-fleC1En6pmD7hvN9drgnm8E26tkOqJqZtux9xHoIldW64QmbKk5wavij7ZiPKBqGy_yHrOuty2czaCG-pe1ZQcAc-PDfpldFDVl0PqLgmyQLGbxP34imiXDI6z_zKMaYGUK5M).哔哩哔哩.2025-01-26 \[引用日期2025-01-30]**
* 4
[](#sup-4)
[《三角洲行动》全新黑夜之子赛季4月17日正式上线](/reference/65245483/533aYdO6cr3_z3kATPSPmKqhNHmQNIivurSFV-ZzzqIPmGapB4rjFJkjrtQw87hkBETK4sgwNIZMxr6nWxIb8a5OJbh9XO1mwCo).腾讯游戏 \[引用日期2025-06-13]**
Binary file not shown.

After

Width:  |  Height:  |  Size: 940 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.
+56
View File
@@ -0,0 +1,56 @@
[
{
"img_id": "dragon02",
"path": "../../data/C3/dragon/dragon02.png",
"title": "悬崖上的白龙",
"description": "一头雄伟的白色巨龙栖息在悬崖边缘,背景是金色的云霞和远方的海岸。它拥有巨大的翅膀和优雅的身姿,是典型的西方奇幻生物。",
"category": "western_dragon",
"location": "悬崖海岸",
"environment": "天空"
},
{
"img_id": "dragon03",
"path": "../../data/C3/dragon/dragon03.png",
"title": "霸王龙的怒吼",
"description": "史前时代的霸王龙张开血盆大口,发出震天的怒吼。在它身后,几只翼龙在阴沉的天空中盘旋,展现了白垩纪的原始力量。",
"category": "dinosaur",
"location": "史前荒野",
"environment": "陆地"
},
{
"img_id": "dragon04",
"path": "../../data/C3/dragon/dragon04.png",
"title": "奔跑的奶龙",
"description": "一只Q版的黄色小恐龙,有着大大的绿色眼睛和友善的微笑。是一部动画中的角色,非常可爱。",
"category": "cartoon_dinosaur",
"location": "动画世界",
"environment": "未知"
},
{
"img_id": "dragon05",
"path": "../../data/C3/dragon/dragon05.png",
"title": "驯龙高手:无牙仔",
"description": "在电影《驯龙高手》中,主角小嗝嗝骑着他的龙伙伴无牙仔在高空飞翔。他们飞向灿烂的太阳,下方是岛屿和海洋,画面充满了冒险与友谊。",
"category": "movie_character",
"location": "博克岛上空",
"environment": "天空"
},
{
"img_id": "dragon06",
"path": "../../data/C3/dragon/dragon06.png",
"title": "中华金龙",
"description": "一条金色的中华龙在祥云间盘旋,它身形矫健,龙须飘逸,展现了东方神话中龙的威严与神圣。",
"category": "chinese_dragon",
"location": "祥云之上",
"environment": "天空"
},
{
"img_id": "other01",
"path": "../../data/C3/dragon/other01.png",
"title": "金丝猴",
"description": "一只珍稀的金丝猴坐靠在树干上,悠闲地吃着食物。它拥有金色的长毛和蓝色的脸庞,是中国的特有物种。",
"category": "animal",
"location": "森林",
"environment": "陆地"
}
]
+29
View File
@@ -0,0 +1,29 @@
5月,全球多家科技公司发布新的大模型,它们在语义理解、多模态等方面进一步提升,人工智能(AI)的能力边界在不断扩大。随着无人驾驶、机器人等技术借助AI快速进化并逐步投入市场,不少国家通过推进法规建设、开展国际合作等方式,为AI领域创新提供更好的土壤。
大模型更趋实用化
5月下旬,中国深度求索(DeepSeek)公司表示,DeepSeek R1模型已完成小版本升级,当前版本为DeepSeek-R1-0528,模型的思维深度与推理能力显著提升。更新后的R1模型针对议论文、小说、散文等文体进行了进一步优化,能够输出篇幅更长、结构内容更完整的长篇作品,同时呈现出更加贴近人类偏好的写作风格。
同样在5月,美国Anthropic公司推出“克劳德4”系列两款新模型:“奥普斯4”(Opus 4)与“十四行诗4”(Sonnet 4),旨在为业界提供更高标准的编程、推理和智能体应用。Opus 4是行业领先的编程模型,能够高效完成复杂且持续时间长的任务;而Sonnet 4在此前的3.7版本基础上显著升级,具备更强的指令理解能力与推理、编程表现。
行业巨头谷歌公司也没闲着。该公司在5月推出整体性能和智能推理能力均较以往版本大幅提升的多个“双子座2.5”系列模型,并发布了多个多模态模型,如图像生成模型Imagen 4和视频生成模型Veo 3,具备从文本等多种输入形式生成高质量视觉内容的能力。音乐生成模型Lyria 2为音乐人提供了多模态创作工具。AI电影制作工具Flow集成了先进的多模态技术,使用户通过自然语言描述就能生成高质量的视觉作品。
AI仍有不少缺陷需克服
尽管当前AI应用已相当广泛,但不少缺陷还是会影响其实用性。研究人员正努力分析导致这些缺陷的原因并寻求新的解决方法,从而改善AI的性能。
一个比较明显的问题是,AI生成内容虽然已非常流畅,但提供的信息很多时候还是不准确。5月,日本研究人员在德国《先进科学》杂志发表的一项研究成果中指出,这一问题与人类的语言障碍——失语症类似。
据研究人员介绍,大模型在出现严重错误时仍表达流畅,这与感觉性失语症的症状有相似之处,即说话流利却总说不出什么意思。这并不意味着AI聊天机器人有“脑损伤”,但它们可能被锁定在一种僵化的内部模式中,限制其灵活运用所储存知识,就像患了感觉性失语症。未来研究人员可以针对相关问题,找到改善措施。
业界也确实在努力从不同角度去寻求优化大模型的解决方案。中国科学院自动化研究所联合鹏城实验室提出了一种高效推理策略AutoThink,可让大模型实现自主切换思考模式,避免“过度思考”。
据研究人员介绍,AutoThink提供了一种简单而有效的推理新范式——通过省略号提示配合三阶段强化学习,引导大模型不再“逢题必深思熟虑”,而是根据问题难度自主决定“是否思考”“思考多少”。在多个数学数据集上,AutoThink实现了准确率与效率平衡,既提升性能又节省算力,展示出较强的适应性和实用性。
营造更合理的AI创新环境
国际劳工组织5月20日发布一份有关生成式AI与就业的报告表示,全球四分之一的工作岗位可能受到生成式AI影响。不过报告也指出,在劳动领域,生成式AI本身并无好坏之分,其社会经济影响在很大程度上取决于对技术普及的管理方式。
一些国家已在积极尝试通过优化政策、法规来营造更好的AI创新环境。日本参议院全体会议5月28日以多数赞成票通过该国首部专门针对AI的法律,旨在促进AI相关技术研发和应用并防止其滥用。依据这部《人工智能相关技术研究开发及应用推进法》,日本拟设立以日本首相为首、全体内阁成员参加的“AI战略本部”作为日本AI政策的“司令部”,并制定“AI基本计划”。
国际合作同样重要。“2025中国—上海合作组织人工智能合作论坛”5月29日在天津召开。论坛发布《中国—上合组织国家人工智能应用合作中心建设方案》,邀请上合组织成员国共建人工智能应用合作中心,围绕夯实人工智能发展基础、提供开源开放服务、加强产业合作对接、促进人才培育等方面加强务实合作,共同促进人工智能技术普惠应用。
@@ -0,0 +1,47 @@
# 咖喱炒蟹的做法
第一次吃咖喱炒蟹是在泰国的建兴酒家中餐厅,爆肉的螃蟹挂满有蟹黄味道的咖喱,味道真的绝,喜欢吃海鲜的程序员绝对不能错过。操作简单,对沿海的程序员非常友好。
预估烹饪难度:★★★★
## 必备原料和工具
- 青蟹(别称:肉蟹)
- 咖喱块(推介乐惠蟹黄咖喱)
- 洋葱
- 椰浆
- 鸡蛋
- 生粉(别称:淀粉)
- 大蒜
## 计算
每次制作前需要确定计划做几份。一份正好够 1 个人食用
总量:
- 肉蟹 1 只(大约 300g) * 份数
- 咖喱块 15g(一小块)*份数
- 椰浆 100ml*份数
- 鸡蛋 1 个 *份数
- 洋葱 200g *份数
- 大蒜 5 瓣 *份数
## 操作
- 肉蟹掀盖后对半砍开,蟹钳用刀背轻轻拍裂,切口和蟹钳蘸一下生粉,不要太多。撒 5g 生粉到蟹盖中,盖住蟹黄,备用
- 洋葱切成洋葱碎,备用
- 大蒜切碎,备用
- 烧一壶开水,备用
- 起锅烧油,倒入约 20ml 食用油,等待 10 秒让油温升高
- 将螃蟹切口朝下,轻轻放入锅中,煎 20 秒,这一步主要是封住蟹黄,蟹肉。然后翻面,每面煎 10 秒。煎完将螃蟹取出备用
- 将螃蟹盖放入锅中,使用勺子舀起锅中热油泼到蟹盖中,煎封住蟹盖中的蟹黄,煎 20 秒后取出备用
- 不用刷锅,再倒入 10ml 食用油,大火让油温升高至轻微冒烟,将大蒜末,洋葱碎倒入,炒 10 秒钟
- 将咖喱块放入锅中炒化(10 秒),放入煎好的螃蟹,翻炒均匀
- 倒入开水 300ml,焖煮 3 分钟。
- 焖煮完后,倒入椰浆和蛋清,关火,关火后不断翻炒,一直到酱汁变浓稠。
- 出锅
## 附加内容
- 做法参考:[十几年澳门厨房佬教学挂汁的咖喱蟹怎么做](https://www.bilibili.com/video/BV1Nq4y1W7K9)
@@ -0,0 +1,61 @@
# 小龙虾的做法
![成品](./成品.jpg)
在家里做的小龙虾,肉质细嫩,鲜嫩多汁,干净卫生。
预估烹饪难度:★★★★
## 必备原料和工具
- 小龙虾
-
- 香叶
- 八角
- 桂皮
- 青花椒
- 花椒
- 子弹头辣椒
- 葱姜蒜
- 郫县豆瓣
- 黄豆酱
- 啤酒
- 生抽
-
## 计算
以下是两斤小龙虾的量,按比例调整就好。
- 小龙虾 = 2 斤
- 油 = 70 毫升(这是平时炒菜 3 倍量)
- 香叶 = 两片
- 八角 = 一个
- 桂皮 = 3 克
- 青花椒 = 10 克
- 花椒 = 10 克
- 子弹头辣椒 = 5 克
- 葱 = 一根大葱
- 姜 = 30 克
- 蒜 = 7 瓣大蒜
- 郫县豆瓣 = 30 克
- 黄豆酱 = 30 克
- 啤酒 = 500 毫升
- 生抽 = 30 毫升
- 盐 = 10 克
## 操作
- 小龙虾刷干净去虾线,葱切 2cm 葱段,姜蒜切末。
- 烧油,油微热, 下香叶、八角、桂皮、青花椒、花椒、子弹头辣椒。
- 香料出香气之后下锅葱姜蒜
- 葱姜蒜爆香后,加入郫县豆瓣、黄豆酱,炒出红油。
- 下小龙虾,翻炒至变色。
- 加入啤酒,等啤酒烧开后加入生抽,盐。
- 将小龙虾完全煮熟后出锅。
## 附加内容
饭店应该都是油炸一遍,家庭油炸的话,太浪费了,所以在这个菜谱里用油比炒菜油多一些煎一下,实测同样好吃。
去虾线后的虾肉比不去虾线的虾肉口感差一些,并且小龙虾去虾线对新手是一个挑战,能接受虾线的情况下不去虾线也可以。
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f925932ded89df54e77c3148c70e772e8902a498a3bb0208a7404d7fcdc4a4a1
size 562566
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:11f5b7bdcd5941a2a56de1e011298d5ee4acb1ba7c3789ef653ab6fe994865ff
size 92655
@@ -0,0 +1,57 @@
# 干煎阿根廷红虾的做法
![示例菜成品](./干煎阿根廷红虾.jpg)
平常所见到虾,只有赴“汤”蹈“火”后,才能红!阿根廷虾很任性,一红就红一辈子!跟它住在北极的亲戚,北极虾一样,天生红。
阿根廷红虾,之所以这么红,是因为它生活在深海中,使得它体内含有丰富的碘、磷及珍贵的虾青素等微量元素,能够增强人体免疫力,还对心脏活动具有重要调节作用,可以减少血液中的胆固醇含量。
阿根廷红虾,不仅个大肥美,虾肉白如凝脂,细腻腴滑,口感鲜嫩,味道甜香浓郁,是虾类料理界的宠儿,看着真让人垂(chao)涎(ji)欲(xiang)滴(chi),快享受这大快朵颐的欢愉吧!
预估烹饪难度:★★★
## 必备原料和工具
- 阿根廷红虾(选用了速冻虾)
- 海盐(研磨装)
- 黑胡椒(研磨装)
- 白葡萄酒
- 生抽
- 香菜
- 柠檬
- 洋葱
- 生姜
- 大蒜
## 计算
- 阿根廷红虾 2-3 只
- 海盐 5g
- 黑胡椒(研磨装)
- 白葡萄酒 20ml
- 生抽 1ml
- 香菜 3 片
- 柠檬 1 片
- 洋葱 10g
- 生姜 10g
- 大蒜 10g
## 操作
- 阿根廷红虾解冻,最好是提前 1 天从速冻取出放到冷藏里自然解冻,能更好保持风味和口感。可买已经开背去虾线的,节省了不少时间
- 解冻好的红虾洗净擦干备用,注意这里一定要沥干水分,赶时间可以用厨房用纸吸干水分
- 生姜切片,洋葱切小方块,香菜洗干净后,叶茎分离,把香菜叶切碎,大蒜压碎切成小块碎末
- 大火热锅,热锅后倒入两调羹橄榄油,等油温升高后,放入生姜片,洋葱块和香菜茎煸炒
- 约 1 分钟后取出生姜,洋葱和香菜茎,弃用
- 调中大火,放入红虾开始煎,注意所有虾需要单面都完整接触平底锅,煎约 2 分钟,同时给每只虾刷上一层油
- 待底面虾壳有微微焦黄时翻面,并撒入大蒜碎末,轻微晃动平底锅使得受热均匀
- 约 1 分钟后添加 20ml 白葡萄酒
- 再煎 1 分钟后调中小火,均匀撒上一层盐和黑胡椒
- 给每只虾滴上一滴生抽
- 撒上香菜叶,装盘
- 切好柠檬片,摆放到盘边即可
## 附加内容
- 柠檬可提升虾的口感,但偏酸,可以根据喜好添加,也可以不用
- 趁热吃
@@ -0,0 +1,64 @@
# 微波葱姜黑鳕鱼的做法
这道菜改编自西雅图 Veil 餐厅主厨 Johnny Zhu 的母亲 Margaret Lu 的菜谱。卢女士原菜谱是使用罗非鱼来做这道菜,Johnny 改为鳕鱼,但也可以用大比目鱼鱼排,或者海鲈鱼、鳟鱼等。每种鱼的密度有差别,烹饪时间要做微调。
预估烹饪难度:★★★
## 必备原料和工具
原料:
- 黑鳕鱼,带皮
调味料:
- 青葱
-
- 料酒
- 酱油
- 芝麻油
- 花生油
工具:
- 密封袋
## 计算
每 2 份:
- 黑鳕鱼,带皮,2 片,450g(本菜谱主角,所有调料可根据鳕鱼的实际重量进行比例调整)
- 青葱,葱白,25g。
- 青葱,葱绿,10g。
- 姜,13g。
- 料酒,5mL。
- 酱油,25mL。
- 芝麻油,2mL。
- 花生油,50mL。
## 操作
- 鱼片分别放入密封袋,鱼皮向下放在盘子中。
- 取葱白切丝 25g,姜去皮后切丝,10g,混合在一起后分成两半,分别放在袋内鱼片上。
- 每个袋子倒入 2.5mL 料酒。
- 封好密封袋,放入微波炉中,中火(800 瓦)微波至*不透明且容易散开*时(约 3.5-5 分钟),从袋中取出鱼片。
- 去除青葱和姜。
- 取酱油 25mL,芝麻油 2mL,混合均匀后平均淋在两片鱼片上。
- 取葱绿切细丝 10g,姜去皮后切丝 3g,混合后分成两份撒在鱼片上。
- 取花生油 50mL,在小锅中加热至 190℃。
- 将热油淋到放油葱绿的鱼片上,立刻上桌。
## 附加内容
### 使用海鲈鱼、罗非鱼、大比目鱼或者龙脷鱼
| 鱼类 | 是否切片 | 重量 | 微波时间 |
|----------|----------|------|-----------|
| 海鲈鱼 | 整条 | 450g | 6.5 分钟 |
| 罗非鱼 | 整条 | 800g | 6 分钟 |
| 大比目鱼 | 切片 | 170g | 2.25 分钟 |
| 龙脷鱼 | 切片 | 170g | 1.5 分钟 |
### 其他变化
- 如果想让香气更为浓郁,在微波前可将葱姜与料酒均匀涂抹在鱼片的两侧,再进行微波加热。
+59
View File
@@ -0,0 +1,59 @@
# 水煮鱼的做法
水煮鱼是一道做法中等难度的硬菜。巴沙鱼富含优质蛋白且脂肪含量低,配合各种时令蔬菜十分营养健康。初学者一般需要 2 小时即可完成。
预估烹饪难度:★★★★
## 必备原料和工具
- 巴沙鱼
- 蔬菜(比如土豆片/豆芽/花菜/生菜/……)
- 红油豆瓣酱
- 藤椒油
- 菜籽油
- 白胡椒粉
- 蒜瓣
-
-
- 量杯
- 厨房秤(可选)
- 大不锈钢碗
## 计算
以下用量适合 3 至 5 人食用。
- 巴沙鱼 500g
- 蔬菜(比如土豆片/豆芽/花菜/生菜/……) 可有不同搭配,推荐合计重量 300g 至 500g
- 红油豆瓣酱 40g (不怕辣想多加红油就多加 10 至 20g)
- 豆豉 10g (可选)
- 藤椒油 10ml
- 菜籽油 25ml
- 白胡椒粉 3g
- 大蒜 2 瓣
- 盐 5g
- 糖 2g
## 操作
- 准备:巴沙鱼若是从冷冻柜里取出,需要放室温自然解冻 5 小时再做切片处理。
- 切片:巴沙鱼撇成薄片,约 5cm 长,3cm 宽。
- [腌制](../../tips/learn/学习腌.md):将切好片的巴沙鱼放入大不锈钢碗中
- 加入 30g 豆瓣酱,3g 盐,10ml 藤椒油,3g 白胡椒粉
- 用手抓匀后加入 5ml 菜籽油收尾封住口味
- 常温静置至少 30 分钟入味。
- 备菜:大蒜切成蒜末。以 300g 花菜,200g 生菜为例,将花菜与生菜洗净。
- 焯水与炒菜:花菜[开水锅焯水](../../tips/learn/学习焯水.md)备用;将生菜洗净晾干,炒熟备用(不用放油)。
- 炒豆瓣酱:热锅冷油(菜籽油 20ml),加入 10g 豆瓣酱,10g 豆豉(可选),加入蒜末,**中火**慢炒。
- 汆鱼片:加入 150ml 热水,水很快开后加入腌制好的鱼片,轻轻翻动让鱼片在水中散开,加入 2g 盐和 2g 糖调味(此时可根据个人口味调整盐的用量)。水再次沸腾后即可盛盘。
- 盛盘:先将熟的蔬菜盛至大碗中,然后将热的鱼片盛在蔬菜上面,浇上锅中剩余热汤即可!
## 附加内容
- 垫底的蔬菜组合及用量可自由发挥,但需要注意各种蔬菜的特点,比如改成土豆的时候,需要将土豆片/土豆块煮熟(可以用筷子戳一戳确认)。
- 红油豆瓣酱(辣度)以及盐的用量可根据个人口味调整。
- 注意切鱼片的时候可以垂直于鱼片长条的方向先剁成 5cm 的鱼块,然后翻转 90 度斜着撇成薄片。
- [腌制](../../tips/learn/学习腌.md)的时候注意不要太用力抓。
- [How to Fillet a Fish 怎样给鱼剔骨](https://www.youtube.com/watch?v=uXSgGtMkgro)
### 参考资料
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fcab1b3841f8e0c7ef5940c613d5dc32fb63d8ebfb33ba8c341789e587cae7a0
size 158684
@@ -0,0 +1,45 @@
# 油焖大虾的做法
预估烹饪难度:★★★★
## 必备原料和工具
- 黑虎虾 or 明虾、
- 葱、姜
- 料酒、盐、冰糖、植物油
## 计算
1 人食用的版本。
- 虾 10 只
- 花椒 5g
- 葱 50g
- 姜 20g
- 黄酒 30g
- 盐 3g
- 冰糖 10g
- 植物油
## 操作
- 剪虾枪到根上,虾须虾爪都剪掉,沙包挑掉,开背虾线挑出来,洗净备用
- 炸料油
- 油温三成热放花椒,油热离火,放葱姜(不要让油变色最好)葱稍微变黄沥油 (葱油弄多了可以留着作为拌面使用)。
- 下油,虾摆放整齐,两面变色后轻轻摁虾头
- 放姜米(姜切成细颗粒)
- 黄酒 30g
- 水两小碗
- 盐 3g
- 冰糖 10 克
- 大火烧开转小火盖盖子闷(中途不能再加汤水,不要开盖)
- 皮亮虾弯就可以起锅,虾摆盘
- 收汁(过滤后倒回锅里收浓,放葱油 ) 汤汁剩余 1/4 时。
- 浇汁
- 完成
- ![成品](./油焖大虾.jpg)
- 开吃✅
## 附加内容
- 做法参考:B 站老饭骨视频[从小吃到大的油焖大虾居然是假的?泰斗级大师还原真·味道](https://www.bilibili.com/video/BV17f4y1W7z9)
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8a5de1202b8d802706addcbac7459a7f373f66fdabd948686e0e4661d6836856
size 187076
@@ -0,0 +1,78 @@
# 烤鱼的做法
预估烹饪难度:★★★★
## 必备原料和工具
- 草鱼(农贸市场或者超市让店家杀掉,去除不要的器官)
- 大葱
- 料酒
- 白胡椒粉
- 食用盐
- 大蒜
- 桂皮
- 八角
- 香叶
- 青花椒
- 干辣椒段
- 灯笼椒
- 火锅底料(随意)
- 千张
- 绿豆芽
- 洋葱
- 豆瓣酱
- 芹菜段
- 熟花生米
- 白芝麻
- 香菜(放更好吃,根据个人口味可放可不放)
## 计算
每份:
- 草鱼 大约三斤
- 大葱 半根
- 食用油 20ml
- 料酒 10-15ml
- 食用盐 5-10g
- 白胡椒粉 5g-10g
- 桂皮 一小片
- 八角 两个
- 大蒜粒 八个
- 香叶 两张
- 青花椒 一小把
- 干辣椒段 10 个
- 灯笼椒 4 个
- 芹菜段 两根
- 洋葱 半个
- 千张 一张
## 操作
- 草鱼(一般 3 斤 )从背部切开,两面沿着鱼的背部往下划几刀,不要划到鱼肚皮,不然不易定型
- 可以用热水浇在鱼身上洗去粘液或者用刷子在流动水龙头下面不停的刷洗,直到摸着没有黏糊糊的手感。
- 把鱼放到容器中,加入料酒,10g 白胡椒粉,5g 食盐抹匀腌制二十分钟入味。
- 把半根大葱切成一块一块,大蒜粒中间切开,和八角香叶桂皮放在一个容器中
- 干辣椒段中间一分为二切开并和灯笼椒装在一个容器中
- 芹菜切小段
- 豆芽焯水
- 千张焯水切成丝
- 洋葱切成丝。
- 烤制鱼
- 家里有烤箱的可以在烤盘刷上底油,鱼皮朝下,直到烤制两面金黄,然后撒上孜然粉
- 如果没有烤箱,可以热锅热油,锅的两边撒上 2g 食盐,下入草鱼开始煎,刚下入的时候不要着急翻动,等一面定型后再翻面,煎制两面金黄,撒上孜然粉,出锅装在盘子里准备。
- 锅中撒上 20ml 食用油,等到油热后,把大葱大蒜八角香叶倒入炒香
- 加上一包火锅底料的一半和 15-20g 豆瓣酱,炒出红油
- 加入 5g 白糖,10g 食盐,5ml 生抽调味,倒入和食材齐平的清水煮开
- 依次下入芹菜段,豆芽,千张丝,不用煮熟,稍微烫一下后铺上洋葱丝,放上烤鱼
- 加入干辣椒,灯笼椒,青花椒
- 另一个锅烧油,油热后浇在刚加入的辣椒上面激发出香味
- 最后撒上熟花生米,葱花,白芝麻,香菜
- 煮 5-6 分钟,美味即成。
![示例菜成品](./烤鱼.jpg)
## 附加内容
- 技术总结:上述
- 这道菜的食盐,胡椒粉,孜然粉,食用油,生抽,白糖等的使用量,根据个人口味和食材比例做决定,并不需要严格按照上述分量来做。
@@ -0,0 +1,32 @@
# 清蒸生蚝的做法
预估烹饪难度:★★★
## 必备原料和工具
* 生蚝
*
*
*
* 酱油
* 刷子
## 计算
* 饮用水 1 升
* 生蚝 6 个
* 葱 3 颗
* 蒜 6 瓣
* 姜 1 小块
* 酱油 每个生蚝 1 ml
## 操作
* 将生蚝用刷子刷干净(没有刷子用牙刷)。
* 蒸锅中放水,将蒸屉放上之后,将 6 个生蚝平铺在蒸屉,使用 50%功率,蒸 3 分钟。
* 用右手拿着湿抹布掀开烫锅盖,将每个生蚝的外壳掀开一半去掉,生蚝的凸面向下,平面向上,每个放 1 根姜丝,10g 蒜末放到生蚝上。
* 关上烫锅盖,100%功率蒸 3.5 分钟。
* 停火,用右手拿着抹布掀开烫锅盖,每个放 5ml 酱油。
* 盛盘。
## 附加内容
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2574533c049d4f12ba4f982ec77dc7699c1db974c213a5d5d5c09c2d0535c13a
size 340422
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:512c9ad772cdd6f01ca678bd2d5b95302cd67b214cd5a77eaeb68415395a2dc5
size 359597
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aed686cdab101e7d3178b885b0187f8bb72c1c093ca638034c40ba68fc98ecc7
size 263862
@@ -0,0 +1,50 @@
# 清蒸鲈鱼的做法
预估烹饪难度:★★★
## 必备原料和工具
- 鲈鱼(害怕杀鱼的同学可以让店家帮忙杀)
- 香葱
-
- 食用油
- 蒸鱼豉油
- 料酒
- 食用盐
## 计算
每份:
- 鲈鱼 一条
- 香葱 三根
- 姜 一块
- 食用油 10-15ml
- 蒸鱼豉油 10-15ml
- 料酒 10-15ml
- 食用盐 5-10g
## 操作
- 姜切片切丝、香葱的葱白切段,葱绿切丝,切丝后放入冷水浸泡备用。
- 鲈鱼处理好后洗净,用厨房纸擦干,两面分别划几刀,用盐洗掉鱼身的粘液,并用 10g 盐抹遍鱼身的内外,腌制 10 分钟以上。
- 补充一个鲈鱼改刀和摆盘的方法,改刀后可以让鲈鱼立起来蒸,均匀受热,同时吃起来更加方便,无需翻面。
- ![改刀](./改刀.jpg)
- ![摆盘](./摆盘.jpg)
- 鱼肚内塞上姜和葱白,鱼身也撒上姜和葱白,量为备用的一半。蒸鱼的碟子用筷子将鱼跟碟子隔开蒸
- 水烧热感觉到水温后放进入鱼
- 大火清蒸 10 分钟。
- 蒸好的鱼,用干净的盘子装起来并去除身上姜蒜
- 鱼身浇上 15ml 蒸鱼豉油
- 鱼身重新撒上姜和葱丝,锅内加上 10ml 食用油并烧热,将食用油淋至鱼身即可出菜
![示例菜成品](./清蒸鲈鱼.jpg)
## 附加内容
- 技术总结:
- 这道菜属于有手就行,关键点在于火候,鱼的大小跟火候都会相关,太久会导致鱼肉太老极度影响口感,太短会导致部分鱼肉没熟。所以大火蒸鱼一般是 10 分钟内较佳。
- 切记蒸鱼需要用筷子隔开装鱼的盘子,这样做的好处有两点:
- 1、鱼在蒸的过程中会将水滴到盘子,如果鱼直接接触会导致鱼食用时会腥。
- 2、能够将鱼均匀受热。
- 这道菜难度系数简单,而且味道非常棒哦
@@ -0,0 +1,56 @@
# 白灼虾的做法
白灼虾非常适合程序员在沿海地区做,类似于清蒸鱼:简单容错、有营养、有满足感,甚至很好看。
预估烹饪难度:★★
## 必备原料和工具
- 活虾
- 洋葱
-
-
-
- 食用油
- 酱油
- 料酒
- 芝麻
- 蚝油
- 香醋
## 计算
每次制作前需要确定计划做几份。一份正好够 1 个人食用
总量:
- 虾 250g * 份数(建议 1-2 人份)
- 葱 一根
- 姜 一块
- 洋葱 一头
- 蒜 5-8 瓣
- 食用油 10-15ml
- 料酒 20 ml
- 酱油 10-15ml
- 芝麻 一把
- 香醋 10 ml
- 蚝油 10 ml
## 操作
- 洋葱切小块,姜切片,平铺平底锅。
- 活虾冲洗一下(去除虾线、剪刀减掉虾腿虾须子都是可选操作),控水,铺在平底锅的洋葱、姜片之上。
- 锅内倒入料酒,盖上锅盖,中火 1 分钟,小火 5 分钟,关火 5 分钟。
- 和上一步并行操作,制作蘸料:
- 葱切成葱花、蒜切碎、倒入酱油、芝麻、香醋,搅拌之。
- 油烧热,淋入蘸料。
- 虾出锅,用干净的盘子装好。
![白灼虾](./白灼虾.webp)
## 附加内容
- 技术细节:
- 开始不能大火、防止糊底。
- 如果锅盖有通气口、时间要相应调节一下(考虑增加 30 秒中火)。
- 蘸料其实也是可选的、也可以是纯的醋,大自然馈赠的鲜虾在没有水带走冲淡鲜甜的情况下口感味道都非常棒的。
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:95333f6dc71486bbd921a95fab2304fe47a6c1c94d93ca099730ff98b1006776
size 164196
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f27e7bd12a4467c047813eafac25eb704b010f375bf388b518c2196f5e55cca0
size 196602
@@ -0,0 +1,67 @@
# 糖醋鲤鱼的做法
预估烹饪难度:★★★★
## 必备原料和工具
- 鲤鱼
- 番茄酱
- 白糖
- 白醋
- 淀粉
-
-
-
- 料酒
- 香菜一颗
- 盆(两个)
- 菜刀一个
- 笊篱一个、锅铲一个
## 计算
注意,该菜只有 3 人以上版本(过大或太小的鱼都是不合适的),所以不需要公式计算,特别适合家庭聚餐时食用,如年夜饭
- 鲤鱼 = 约 3 斤
- 清水 = 50g
- 番茄酱 = 40g
- 白糖 = 20g
- 白醋 = 10g
- 淀粉 = 10g
- 盐 = 30g
- 大葱 = 30g(约半颗)
- 姜 = 30g
- 料酒 = 25g
## 操作
- 将鱼清洗干净,确保无鱼鳞等异物
- 将鱼头朝左,鱼肚朝下,右手持刀。刀竖直切下 1cm,按紧鱼身往左片 3-4cm,再将鱼片中间轻轻划一刀
- 将鱼放进盆里,然后将大姜切片,大葱切段(随便切切就行了,主要是需要去腥味)
- 用吃奶的力气将大葱大姜里的汁水挤到盆中
- 加入 20g 盐,25g 料酒,然后给鲤鱼搓个澡,涂抹均匀
- ![腌制](./腌制.jpg)
(腌鱼时间越长,鱼腥味就越小,推荐腌 30 分钟以上)
- 找个干净的盆,加入 100g 面粉、200g 淀粉、180g 水、5g 盐,用手将其搅拌均匀,面糊此时粘稠呈可拉丝状态,然后打入一个鸡蛋,再次搅匀
- 等待 30 分钟
- 将鱼放在案板上,用干毛巾将鱼身上的水擦干(这样可以更好的挂糊)
- 将盆冲洗干净,用干毛巾擦干
- 起锅烧油,加入约 1L 的油,将油温烧至 7 成热,约 200-240 度
- 捏起鱼的尾巴,将鱼头沉入锅底,用勺子往鱼的身上淋热油,待面糊成型后,将鱼慢慢放入锅中,拿锅铲轻轻铲起鱼的头部,然后垫上笊篱。防止底部炸糊。
- 准备一个盛鱼的盘子,放在锅的旁边。
- 用锅铲从鱼身处轻轻铲入,两个工具配合鱼翻个身。再炸两分钟,还是同样的方式(笊篱托着鱼头,锅铲托着鱼身,将鱼盛入盘中)
- 将锅中的油倒入擦干的盆中,放置一边,然后将锅刷干净
- 将 50g 清水、40g 番茄酱、20g 白糖、10g 白醋放入小碗中,搅拌均匀
- 再准备一个小碗加入 10g 淀粉、10g 水,搅拌成水淀粉
- 开大火将锅烧热,然后倒入之前准备的料汁,大火烧开,转小火
- 加入调好的水淀粉,边倒边搅拌,然后 20 秒后关火
- 将熬好的糖醋汁用勺子均匀地浇在鱼身上,可以加点香菜或葱花点缀,糖醋鲤鱼就做好了
- ![成品](./成品.jpg)
这里的糖醋汁熬的有点稠了......
## 附加内容
这道菜难度系数算中等吧,对新手还是不太友好的......
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:738cfdf74dd7f3540f40787f890500a7c2b01e6c6af12163599ba35140c94192
size 177914
+63
View File
@@ -0,0 +1,63 @@
# 红烧鱼的做法
- **WARNING** 如果没有使用过菜刀剁过肉类食物,那么并不推荐使用该菜单!!!
- 在操作中,锋利的菜刀可能会划伤手指,请一定要小心。
- 此做法代表通用红烧鱼做法,材料分为必备和可添加~
预估烹饪难度:★★★★
## 必备原料和工具
- 姜、蒜瓣、干辣椒
- 油、盐、料酒、醋、酱油、白砂糖
-
### 可额外添加的材料
注意这些材料都是经验计算得出,除了香菜外其他多了并不是一件好事儿
- 蚝油
-
- 香菜
- 小米椒
- 味精(鸡精)
## 计算
* 鱼 建议新手以一条中等大小的鲫鱼上手,提前划好花刀,方便成熟(不然鱼背上容易夹生)
* 姜丝,以正常老姜切 2-3 片,然后片丝即可
* 蒜瓣 3-4 个,拍碎或者切碎或者切片
* 干辣椒(依照个人口味)2-3 个,切碎
* 香菜按照个人口味
* 盐 10g,如果辣椒辣度高,建议多一点
* 醋 5ml
* 酱油 5ml
* 白砂糖 10g
* 葱 1-2 根,正常就撒葱花
* 小米椒 1-2,不放也可以,过来人的经验,最多放 2 个,不然辣度过高要菊花残。
* 味精,看个人口味,不要放多,5g 即可。
* 蚝油,5g 即可,和味精一个道理
## 操作
### 原材料准备
* 姜蒜准备好,切碎
* 干辣椒切碎,和姜蒜一起
### 最终步骤
* 加入 30-50ml 油,等待锅热...
* 放入**擦干水分的鱼**(不想被热油溅一身的话),然后晃动锅,用热油煎鱼,注意这过程一定要小火
* 将鱼翻面,重复上面油煎过程
* 放入姜蒜辣椒,翻炒出香味
* 倒入料酒,稍微多一点,此过程注意安全,会起大量油烟
* 倒入醋(喜欢醋可以多放一点)
* 然后放入白砂糖,酱油(老抽)
* 加入冷水,以刚好淹没鱼身为宜,然后调成中火,盖上锅盖,大概 1 分钟后将鱼翻身,继续盖上锅盖
* 3-4 分钟后,加入盐、小米椒、蚝油(味精、鸡精等),然后继续盖上锅盖,后续继续要翻身
* 当锅内汤汁收汁到鱼的脊背线上的鱼鳍下面一点点的时候(或者汤汁不多的时候),转小火,加入香菜,葱花,然后盖上锅盖 20 秒,关火
* 起锅
## 附加内容
@@ -0,0 +1,71 @@
# 红烧鱼头的做法
- **WARNING** 如果没有使用过菜刀剁过肉类食物,那么并不推荐使用该菜单!!!
- 在操作中,锋利的菜刀可能会划伤手指,请一定要小心。
预估烹饪难度:★★★★
## 必备原料和工具
- 注:如果有可能,尽量另准备一把菜刀,超市或市场上均有廉价且刀片更厚的菜刀,刀片厚度在 5-7mm 为最佳。
- 大葱、姜、大蒜、香菜、美人椒
- 油、盐、鸡精、生抽、老抽、陈醋、黑胡椒粉、料酒
- 八角、干辣椒
- 鱼头一个
- 注:市场直接贩卖的鱼头一般分为两种:白鲢、花鲢。前者价格便宜,后者价格略贵,但口感也更佳!
## 计算
注意,这道菜仅有足够 2 人食用的版本。
* 鱼头一个
* 大葱 200g
* 姜 80g
* 蒜瓣 3-4 个
* 美人椒 1/4 个
* 香菜 4 棵
* 八角两个,干辣椒五个
## 操作
### 原材料准备
* 葱、姜、蒜、香菜、美人椒分别清洗干净。
* 干辣椒与八角稍微冲洗即可。
* 大葱切两半。后半段大葱(葱白处)切段,每段长度约 4cm。前半段(葱叶处)先切段,再将每段劈为四瓣。
* 姜切片,每片厚度约 3mm。
* 大蒜拍碎。
* 拿出两棵香菜去根,切为 1.5cm 香菜碎。
* 将美人椒切为厚度为 3mm 的辣椒圈。
* 干辣椒切四段。
### 腌制鱼头
* 注:下文所述的鱼身是购买鱼头时所附带的鱼肉。
* 将鱼头去鳞,清洗鱼头处未被清理干净的内脏。
* 剁去鱼鳍、清理鱼鳃。
* 将鱼头下巴与鱼身连接的地方剁开,鱼身剁块,鱼头剁成四/六瓣。
* 注:鱼的处理很难用文字完全表述,可以搜索鱼头处理相关视频。
* 将剁好的鱼头进行清洗,最好洗掉鱼块上滞留的血水。
* 将清洗好的鱼块放入盆中,加入 5g 盐、10g 生抽、10g 料酒。放入葱(前半段切碎的那个)、1/3 姜片。将其拌匀,静置 1-2 小时。
### 最终步骤
* 加入 30ml 油,等待锅热...
* 油热,将锅关至小火
* 如果不明白为何要这样做,请查看[学习炒与煎](../../tips/learn/学习炒与煎.md)中的翻炒辅料。
* 放入姜片,慢慢翻炒,以姜片中的大部分汁水被炒出,以金黄色为准。
* 放入葱段,翻炒至葱段略显发白。
* 放入蒜碎、八角、干辣椒,翻炒 5 秒。
* 将腌制好的鱼头倒入锅中,翻炒 2-3 分钟。
* 倒入 500ml 清水,加入 2g 盐、3g 鸡精、5g 生抽、3g 老抽、5g 料酒、2g 黑胡椒粉、3g 陈醋。
* 将两棵香菜放入锅中,盖上锅盖。
* 调至大火,将水烧开。
* 调至中火,慢焖入味。
* 当汤汁减少一半时,打开锅盖。
* 调至大火收汁,汤汁剩余 1/3 时,关火盛至小盆中。
* 注:将锅中的汤汁均匀淋到鱼头上,盛盘时可以将锅中煮的香菜放入小盆底部,这样能让成品菜好看又好吃。
* 将香菜放至已经盛出的鱼头上,把切好的美人椒圈放在香菜之上。
* 色香味俱全的红烧鱼头出炉!
## 附加内容
@@ -0,0 +1,60 @@
# 红烧鲤鱼的做法
预估烹饪难度:★★★★
## 必备原料和工具
- 大葱、姜、大蒜、干辣椒
- 油、盐、生抽、老抽、陈醋、蚝油、料酒、白糖
- 鲤鱼、五花肉
## 计算
2 人食用的版本。
- 鲤鱼 (大约 2 斤)
- 五花肉 100g
- 大葱 200g
- 姜 80g
- 蒜瓣 3-4 个
- 干辣椒两个
- 白糖 50g
## 操作
注:下文所述的鱼是购买时卖家简易处理后的,已刮鱼鳞已去内脏。
- 葱、姜、蒜、干辣椒分别清洗干净。
- 葱白处切段,每段长度约 4cm,再将每段劈为四瓣。
- 姜切片,每片厚度约 3mm。
- 一个大蒜拍碎切末,其余蒜切为二瓣。
- 干辣椒切四段。
- 五花肉切片,约 4cm*4cm。
- 清洗鱼。
- 鱼背肉厚处拉几道斜口,方便入味
- 锅里多倒点油,烧至 7 成热(刚刚开始冒烟),下入鱼炸 1 分钟至鱼皮稍稍变硬捞出备用(注意不要一下锅就拨弄鱼,等炸一会再拨弄、翻面),炸鱼的油倒出,锅里留一点底油
- 将锅里底油烧热,下入五花肉,煸出香味。
- 放入干辣椒、葱、姜、蒜瓣,翻炒 1 分钟。
- 将炸好的鱼倒入锅中。
- 沿锅边倒入
- 50ml 料酒
- 50ml 陈醋
- 50ml 味极鲜
- 20ml 老抽调色
- 5ml 蚝油提鲜
- 5g 匙盐
- 50g 白糖
- 清水没过鱼面。
- 调至中火,将水烧开。
- 调至小火,慢焖入味。
- 15 分钟 后,打开锅盖,挑出锅里的葱、姜、蒜、干辣椒。
- 调至大火收汁,汤汁剩余 1/4 时,撒点蒜末,关火盛出。
- 红烧鲤鱼出锅!
## 附加内容
基于下列原因,需要在红烧鲤鱼中添加五花肉:
- 五花肉煸炒的时候会出猪油,相比较于植物油,动物油脂更香。
- 煸炒至金黄的五花肉炖煮过后吃起来也很香的,相当于配菜。
- 鱼类本身脂肪含量少,所以香味欠缺,着重的是肉质的口感。所以一般做鱼类菜都建议用猪油,想要一锅奶白香醇的鱼汤。猪油是最好的选择~
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:816f7d7bd0c54cee52e8f1ddffebbca96e5f56b9c9e2234520132afc128627a1
size 333658
@@ -0,0 +1,50 @@
# 芥末黄油罗氏虾的做法
![芥末黄油罗氏虾](./芥末黄油罗氏虾.jpg)
这是一道做法简单,味道美味,具有新意的海鲜菜。
预估烹饪难度:★★★
## 必备原料和工具
* 罗氏虾
* 黄油
* 芥末
* 白糖
* 生抽
* 蚝油
*
* 料酒、朗姆酒或啤酒
* 香菜
*
## 计算
按照 1 盘的份量:
* 罗氏虾 1 斤多 广东市场价大概 40~45 一斤
* 黄油 约 20g
* 芥末 15g
* 白糖 3g
* 生抽 30g
* 蚝油 30g
* 盐 3g
* 料酒、朗姆酒或啤酒 15g 到 30g
* 香菜 5 条 切段
* 蒜 5 颗 剁成蒜蓉
## 操作
* 将罗氏虾剪掉头尾尖刺、触须和脚,剪刀把虾身开背,去除虾线。
* 提前搅拌好芥末酱汁:酱油、蚝油、芥末、盐、糖,搅拌均匀!
* 洗好香菜,切段备用。
* 罗氏虾沥掉水,锅中加入油,直接放入罗氏虾,中火,外表煎至金黄,捞出。
* 下入蒜蓉,大火,利用煎虾剩下的油继续煎炒蒜蓉,等到锅中白雾冒出,蒜蓉已经煎出香味,下虾和黄油,让虾充分吸收黄油香味
* 下入调好的酱汁,继续大火煮沸,翻炒虾,至酱汁收汁,加入酒(料酒、啤酒可以放 30g,朗姆酒味道浓郁放 15g 即可。)
* 在等酱汁稍微收汁,加入香菜翻炒两下,即可出锅。
## 附加内容
* 酱汁提前调配好,黄油提前备好,防止中间备料耗时。
* 蒜蓉切记要等虾煎好后捞出再下,防止煎炒过久变黑,发苦。
* 如果不太能接受芥末就放少点,能接受就放多点,如果放多了,煮久一会儿,芥末味也会散去。
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9f93cc9ee9bf97317a47072c93af5ba902b0bdde2037740600a33353bcb076fd
size 274902
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e31d4df915d3718d4075b35a65eec97e9d92b0150388c9dc6f24c6dd802c1257
size 467681
@@ -0,0 +1,65 @@
# 葱油桂鱼的做法
预估烹饪难度:★★★★
## 必备原料和工具
- 桂鱼
- 小葱
- 小米辣
-
- 料酒
- 植物油
-
- 蒸鱼豉油
- 蒸笼(含蒸锅)
- 清水
- 砧板
- 铁锅
- 塑料盘或塑料盆(腌鱼用)
- 一次性手套
- 厨房纸
- 蒸鱼盘子(能平放下一条鱼即可)
- 菜刀
- 削皮刀
- 防烫盘夹(或者防烫手套)
## 计算
这里以 2 份 为例进行编排。实际操作过程中,考虑到鱼肉本身的质感和鲜味会随着单条鱼的体积有所变化,建议大家在烹饪的时候尽量选择以 2 份 的量进行操作鲜味最佳
- 桂鱼 = 1 斤(500g)
- 小葱 = 1 根(长度为 30cm)
- 小米辣 = 2 个
- 姜 = 50g
- 料酒 = 25g
- 植物油 = 15g
- 盐 = 8g
- 蒸鱼豉油 = 10g
- 清水 = 5L
## 操作
- 去菜市场买已经处理好的鱼(自己处理的话最好不要内脏),将鱼身表面的所有鳞片刮干净
- 用厨房用纸将鱼肚子里的贴骨血和黑膜擦干净(帖骨血会影响口感,黑膜是鱼腥味的来源)
- 用菜刀在鱼身表面来回刮几次,将鱼身的黏液刮掉,进一步去除腥味,然后用清水将鱼内外冲洗干净
- 将鱼平放在砧板,使用厨房纸将鱼内外的水分擦干,然后鱼头朝左,尾朝右,从鱼鳃边开始,每隔 3cm 纵向划一刀,深度达到鱼的脊椎骨即可,另一面使用同样的处理方式
- 将鱼平放在盆中,确保盘中没有多余水分
- 取一块 50g 姜(鸡蛋大小),用削皮刀把表面的皮去除并洗干净,然后切成厚度为 3mm 的姜片
- 将小米辣洗干净、去蒂,切成厚度为 2mm 的小圆片(或切成 1mm 宽度的丝状)
- 将小葱洗干净,去除根须,切成 3cm 的小段,稍微粗一点的小葱,可以沿着小葱生长的方向沿中间劈开
- 加入 8g 盐,25g 料酒到盆中,带上一次性手套,然后对鱼进行全身按摩 1 分钟,确保鱼身每个部位都均匀涂抹了盐和料酒
- 按摩好鱼后,在鱼身的每一个刀口中塞入一片姜片,鱼肚子中放入 3 片姜片,腌制 10 分钟(建议不要腌制太久,否则鱼的鲜度降低)
- 在鱼腌制期间,在蒸锅中加入 5L 清水,烧开后,在蒸锅上放上蒸笼
- 鱼腌制好后,会析出水分,将多余水分和腌制用料酒、姜片倒掉,用清水冲洗干净鱼身和鱼肚,用厨房纸擦干鱼身和鱼肚
- 将鱼平放在蒸鱼盘中,重新在鱼身、鱼肚刀口处塞入姜片
- 然后将蒸鱼盘放入蒸笼中,盖上盖子,中火蒸 20 分钟
- 期间水蒸气会附着整个鱼和盘子上,凝结后形成鱼汤,出锅后千万不要倒掉这个汤,这个汤汁是鲜味精华
- 用防烫夹将蒸鱼盘夹出,在鱼身和鱼周围淋上 10g 蒸鱼豉油
- 然后在鱼身和周围均匀撒上小葱段和小米辣
- 在铁锅中倒入 15g 植物油,用中小火慢熬 5 分钟,不要用大火,否则油会挥发很快
- 将出锅后的热油均匀地慢慢地淋在鱼身上,鲜掉眉毛的葱油桂鱼就出炉啦!
## 附加内容
经过若干次测试,成功率 100%,这道菜容错性很高,无论是什么省份、什么口味的人都能兼容。另外,本套教程虽然叫葱油桂鱼的做法,但原料本身不仅限于桂鱼,可以用鲈鱼、多宝鱼等海鱼代替(淡水鱼本身寄生虫会比海鱼多一点,不建议使用淡水鱼,淡水鱼的做法请参考《红烧鱼》等教程),耦合性低、可扩展性强。
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0c19b1374345a4892af215e526b687e62ee5c75fad536ade857413d022ef387f
size 689071
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:52d4c8976ac7b3830cd7a42a46e9945108edb156208b5634d3b62663d4a60ec6
size 182359
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8256763229fc0970307d4edb7e9027cbc4366a9140f327414f35f4ce4fdb5c0d
size 206611
@@ -0,0 +1,43 @@
# 葱烧海参的做法
![示例菜成品](./葱烧海参.jpeg)
这道菜的做法并不难,就是海参泡发是需要时间的。疫情隔离在家,干海参是过年前存的年货,正好拿出来尝试一下。
预估烹饪难度:★★★
## 必备原料和工具
- 泡发好的海参![海参](./海参.jpeg)
- 大葱葱白
## 计算
每份:
- 泡发好的海参(北极参) 4 个
- 大葱葱白 1 根大葱的葱白即可
- 食用油 20-25ml
- 蚝油 20g
- 生抽 5g
- 白糖 2g
- 淀粉 2g
## 操作
- 葱白切成 1cm 的段,备用。
- 海参切成 1cm 的段,备用。
- 准备一个空碗,倒入 20g 蚝油, 10g 生抽, 2g 白糖,搅拌均匀。![料汁](./酱汁.jpeg)
- 另一个空碗倒入淀粉,水,制备水淀粉,勾芡用。
- 热锅,锅内放入 20ml - 25ml 食用油。等待 10 秒让油温升高。
- 放入葱白,调*小火*,注意不要让葱白变焦。大概煎 3-5 分钟即可。![葱白](./葱白.jpeg)
- 用筷子夹出葱白,放入盘中备用。
- 倒入调好的料汁,炒香,**等待 1 - 2 分钟** 。
- 放入切好的海参,翻炒 1 分钟
- 加入 100 ml 的水, 中小火, **等待 5 分钟**
- 等待锅中汤汁快干的时候,加入水淀粉,加入前面取出的葱白
- 在外观*呈粘稠状态*后关火,盛盘 ![成品](./葱烧海参.jpeg)
## 附加内容
- 操作时,需要注意观察锅中的水量,如快见底的时候就直接接入水淀粉即可。
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e07620a44f1c674930260924c0543e8e5c3a50a18a0e0f45546178fd4784ecda
size 219213
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:104a89c8700bcaffae40fe2c159237a8ffd2174c10254d42f4107e9d907da648
size 86402
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4a2c2bd7303179454e8df1bb082b236d7d3d3b8b316e78090f1e40b1d5fd0393
size 184204
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fad64ea2c5e5d484ccd9f144831ac8ced3bf1428830a2b63cb4e974e107c828d
size 154644
@@ -0,0 +1,33 @@
# 蒜蓉虾的做法
蒜蓉虾是广东省地方传统名菜,色香味俱全。
预估烹饪难度:★★
## 必备原料和工具
* 海虾
* 蒜蓉酱
* 食用油
* 生抽
## 计算
每份:
* 海虾 8 只
* 蒜蓉酱 50 g
* 食用油 20 ml
* 生抽 5 ml
## 操作
* 用刀从从虾头中间切开,切到距离虾尾 1 cm
* 将蒜蓉酱铺在虾身中间,放在盘子中
* 锅中倒入热水,将盘子放入锅中,大火蒸 3 分钟
* 烧热油,倒入虾盘中,倒入生抽
![示例菜成品](./1.jpeg)
![示例菜成品](./2.jpeg)
## 附加内容
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b586a85222af25349f456faab6f9fa56f4fea9d33c7056f0b23de19324972beb
size 893586
@@ -0,0 +1,46 @@
# 蒜香黄油虾的做法
蒜香黄油虾是一道经典的西式海鲜料理,以鲜虾为主料,配以蒜末和黄油烹制而成。口感鲜嫩,蒜香浓郁。制作简单,适合家庭日常烹饪。
![蒜香黄油虾](./1.jpg)
预估烹饪难度:★★
## 必备原料和工具
- 大虾(推荐黑虎虾或基围虾)
- 无盐黄油(推荐安佳)
- 大蒜
- 白葡萄酒(可选)
- 柠檬
- 平底煎锅
- 厨房用夹
## 计算
每次制作前需要确定计划做几份。一份正好够 1-2 人食用。
每份:
- 大虾 8-10 只(约 200g
- 无盐黄油 30g
- 大蒜 4 瓣(约 20g
- 白葡萄酒 15ml(可选)
- 柠檬 1/4 个
- 橄榄油 10ml
## 操作
- 大虾去头去壳留尾,用牙签挑去虾线,洗净后用厨房纸吸干水分
- 大蒜切成蒜末,备用
- 中火加热平底锅,放入 10ml 橄榄油
- 油热后放入大虾,每面煎 1-1.5 分钟至变色,取出备用
- 同一锅中加入黄油,融化后放入蒜末,小火炒香(约 30 秒)
- 如使用白葡萄酒,此时加入并煮至酒精挥发(约 1 分钟)
- 将虾放回锅中,与蒜香黄油酱汁翻炒均匀(约 1 分钟)
- 挤入柠檬汁,翻炒均匀后立即关火
- 装盘,淋上锅中剩余酱汁
## 附加内容
- 虾不宜过度烹饪,否则会变硬
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:19ee70651712e392a1650628306b3f7a80d100c8b8d06e2c99e8576faee4a634
size 155301
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:570a523b2242606fb521bd0fd57cc28d6dfba8b7e06d2a754ce4e65eda673325
size 160679
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:21d01034bc0c7029bae724690bb5f03c6506a4ed372a6a16f5aeb7d494df3df5
size 183338
@@ -0,0 +1,46 @@
# 蛏抱蛋的做法
蛏抱蛋,是流行于福建省福州地区的传统家常菜
预估烹饪难度:★★★
## 必备原料和工具
* 蛏子
* 鸡蛋
* 食用油
* 洋葱
* 淀粉
* 生抽
* 鸡精
* 料酒
## 计算
每份:
* 蛏子 200 g
* 鸡蛋 2 个
* 食用油 100 ml
* 洋葱 0.25 个
* 淀粉 20 g
* 生抽 5 ml
* 鸡精 5 ml
* 料酒 5 ml
## 操作
* 烧开水,将蛏子放入水中,水煮 2 分钟后,捞上来去壳,放入大碗
* 往大碗中加入洋葱、生抽、料酒、鸡精、生粉后,充分搅拌
* 往大碗中打入 2 个 鸡蛋,继续搅拌
* 起锅烧油,倒入碗中蛏子,煎炸至单面金黄后,翻面继续煎炸
![示例菜成品](./1.jpeg)
![示例菜成品](./2.jpeg)
![示例菜成品](./3.jpeg)
## 附加内容
* 更多情况下,福州当地会选用马蹄(解腻)和马铃薯(洗油),因为疫情期间买不到,所以选用了凤梨
* 闽菜以甜为主,如果吃不惯的可以放弃白糖
* 可以通过勺子敲打瘦肉块,听到声响来判断是否炸透瘦肉
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:721a6ad9b94524c16febebe147e923a10a8359700b270d48fd792fb78cb64c24
size 50316
@@ -0,0 +1,60 @@
# 香煎翘嘴鱼的做法
![香煎翘嘴鱼](./香煎翘嘴鱼.jpeg)
预估烹饪难度:★★★★
## 必备原料和工具
- 翘嘴鱼(肉食性鱼类,肉细腻,口感好)
-
-
-
- 青椒
- 香菜
- 老抽
- 白糖
- 豆瓣酱
- 料酒
- 生抽
-
## 计算
注:这个量大概是 2-3 个人的量
每份:
- 翘嘴鱼:2 斤最佳
- 姜沫:20g
- 葱:半根(50 克)
- 蒜:4 个
- 香菜:个人口味
- 老抽:2ml(不太喜欢重口的可以不放)
- 白糖:10g
- 干辣椒:4-6 个(根据个人口味选择)
- 料酒:100ml
- 生抽:4ml
- 盐:约 50g 用于腌制鱼
- 食用油:100ml
## 操作
- 鱼开背杀好(让卖鱼的杀好,千万不要剖腹杀鱼,切记是开背),清洗干净
- 鱼表面用盐涂抹均匀,倒入料酒约 80ml,姜末 20g,放入冰箱保鲜层进行腌制 1-2 天
- 取出腌制好的鱼,用绳挂起晾晒至半干(约 1-2 天,具体时间需结合气温与阳光)
- 食用前请将鱼用清水清洗,沥干水分(防止水遇油飞溅)
- 开大火将锅烧热,迅速改小火,锅中放油,尽量保持整个锅表面有油,将鱼沿锅边划入锅内(先煎鱼背面)
- 鱼入锅后(和翻面后),不要着急移动鱼的位置(此时容易破皮),煎约 30 秒后,尝试晃动锅
- 背面煎约 1 分钟后,翻面煎约 1-2 分钟,煎至两面金黄
- 等两面都煎好时,把鱼推向锅边一点,留点空间放入豆瓣酱炒香味,放入姜蒜,
- 炒出佐料香味后,加入料酒,生抽,老抽,倒入热水,水量和鱼平齐或者少点
- 此时改中大火,煮 5-10 分钟,后放入青椒断,白糖,鸡精,十三香,陈醋
- 改小火 2-5 分钟,放入葱,香菜,即可出锅
## 附加内容
- 切记鱼是开背杀,腌制时,鱼表面涂抹均匀食盐即可,腌制时间,晾晒时间 1-2 天即可
- 煎鱼全程小火,刚入锅时不要移动鱼,会破皮
- 青椒断放入后注意观察熟透程度,里面的青椒很好吃,另外香菜最后放
- 注意火候的切换,豆瓣酱,白糖的调鲜效果,与陈醋的增香效果
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:97f47e86075c50d9211d9ed27dd12ba91a623e661da6e13e25e38b33856fddc2
size 238094
@@ -0,0 +1,52 @@
# 鲤鱼炖白菜的做法
![鲤鱼炖白菜](./鲤鱼炖白菜.jpeg)
预估烹饪难度:★★★
## 必备原料和工具
- 食用油
-
-
- 鲤鱼
- 白菜心/娃娃菜
-
- 老抽
- 生抽
- 桂皮
- 八角
- 郫县豆瓣酱
- 干辣椒(不吃辣可以不放)
## 计算
注:调料根据鱼的大小进行换算。
每份:
- 食用油:10ml
- 姜:3 片
- 蒜:3 瓣(切成块)
- 鲤鱼:1.2 斤(清理过的)
- 娃娃菜:13 片(可以多放一些,一顿就缩小了)
- 盐:5-8 克
- 老抽:3ml
- 生抽:6ml
- 桂皮:1 块
- 八角:3 个
- 郫县豆瓣酱:20 克
- 干辣椒:4-6 个(根据个人口味选择)
## 操作
- 鲤鱼清洗干净,改刀(在鱼身上多划几个伤口,方便入味)
- 娃娃菜清洗干净放入盘中备用
- 锅中加油,等油热放入“少盐” “姜” “蒜” “郫县豆瓣酱” “桂皮” “八角” 炒出香味
- 把鱼放锅里煎(3 分钟)每(30 秒)需要翻面
- 加入“水”(水量尽量和鱼平齐,可以少一点点) 放入 “生抽” “老抽” “娃娃菜”
- 大火炖 15-20 分钟,汤汁快干时添加 “盐” 即可出锅
## 附加内容
- 也可以放一些粉条,粉条先凉水/热水,需要泡软,可以和娃娃菜一起放入
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ece70cc98f12c33dd9e66fb0ffedd1e7b94ff9dccc3501addd027174ed2a885d
size 455162
@@ -0,0 +1,62 @@
# 鳊鱼炖豆腐的做法
![鳊鱼炖豆腐](./鳊鱼炖豆腐.jpg)
预估烹饪难度:★★★
## 必备原料和工具
- 鳊鱼(鱼可以让摊主帮忙处理好)
- 老豆腐
-
-
-
- 老抽
- 桂皮(可选)
- 冰糖
- 干辣椒(不吃辣可以不放)
- 料酒
- 生抽
-
- 八角(可选)
- 香叶(可选)
- 热水
## 计算
注:这个量大概是 2-3 个人的量
每份:
- 鳊鱼:550 克
- 老豆腐:400 克
- 姜:5 片
- 葱:半根(50 克)
- 蒜:4 个
- 老抽:2ml(不太喜欢重口的可以不放)
- 桂皮:1 块
- 冰糖:5 块
- 干辣椒:4-6 个(根据个人口味选择)
- 料酒:5ml
- 生抽:4ml
- 盐:5-8 克(根据个人口味选择)
- 八角:1 个
- 香叶:1-3 片
- 食用油:10ml
- 热水:400 克
## 操作
- 鳊鱼改刀,放上姜片和料酒腌制 5-10 分钟
- 老豆腐切块后放入水中备用
- 锅中加油,可以放点盐在锅里,防止煎鱼的时候粘锅,把腌制的鱼用厨房纸擦干水分,把鱼放到锅中,两面都煎一下
- 等两面都煎好时,把鱼推向锅边一点,留点空间放入葱姜蒜,干辣椒,香叶,八角炒出味道
- 炒出佐料香味后,加入料酒,生抽,老抽,冰糖,桂皮,倒入热水,水量和鱼平齐或者少点
- 大火烧开后,放入老豆腐,豆腐贴在锅边,加入食盐,转小火
- 小火烧 10-15 分钟,然后大火收点汁,即可出锅
## 附加内容
- 鱼的两面,各煎 2-4 分钟即可
- 煎鱼的时候全程中小火
- 最后出锅时,加入一些切碎的大蒜,味道会更好
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3215cc4bd2a584da624aea7661b2ef98fe9fddb535027d2437309be9d2841c75
size 811157
@@ -0,0 +1,44 @@
# 黄油煎虾的做法
![示例菜成品](./黄油煎虾.jpg)
黄油煎虾是一道制作相对简单、风味极佳的菜式,主要耗时在于处理活虾,总耗时在一个小时内,适合初学者进行烹饪。
预估烹饪难度:★★★
## 必备原料和工具
- 鲜虾(强推肉质紧实的九节虾,普通明虾也可以)
- 黄油(推荐安佳,一次用一小盒 7g)
- 黑胡椒粒(瓶磨的那种)
- 生抽
-
- 白糖
- 米酒
## 计算
每份:
- 鲜虾 300g
- 黄油 7g
- 黑胡椒粒 大概 15ml
- 食用油 45ml
- 生抽 10ml
- 米酒 5ml
- 白糖 10ml
- 盐 2.5ml
## 操作
- 鲜虾摘除头部,顺带扯出虾线(这步处理不好可在下一步开背时取出虾线),使用剪刀剪开或菜刀片开虾背,沥干水分备用
- 调制酱汁:小碗放入上述量的全部生抽、米酒、白糖、盐搅匀备用
- 中大火热锅,热锅内放入食用油,等待 10 秒让油温升高
- 虾全部放入锅中,开始瓶磨黑胡椒,均匀地撒在虾上翻炒
- 虾变色后加入黄油,黄油完全融化后倒入调制酱汁,继续翻炒
- 大火翻炒 15 秒收汁即可装盘
## 附加内容
- 虾开背才更好入味,不过处理时切记切记小心用刀,新手容易伤到手
- [冯小厨的菜谱](https://www.bilibili.com/video/BV1g541177cd)
@@ -0,0 +1,30 @@
# 吐司果酱的做法
饱腹感的懒人快速营养早餐,2 分钟 搞定
预估烹饪难度:★
## 必备原料和工具
- 新鲜吐司
- 果酱
- 面包机
## 计算
- 吐司两片
- 果酱足够涂满一面吐司的量
## 操作
- 将吐司放入面包机
- 设置好档位,时间到了会自动弹出
- 两分钟后吐司加热完成弹出
- 先取出一片吐司,涂满果酱再盖上另一片吐司即可
- 用餐巾纸包一下可以边走边吃也可以吃完再出门
两分钟快速搞定,操作很简单,味道十分美味,十分适合程序员。耗时短,不会产生额外垃圾,也不需要清洗工具什么的。
## 附加内容
面包机一般不会超过一百块,吐司去楼下超市或美团买菜送上门,一般一包十块钱八片,保质期比较短,很干净卫生。
@@ -0,0 +1,47 @@
# 太阳蛋的做法
预估烹饪难度:★★
## 必备原料和工具
- 鸡蛋
-
-
- 分可控火候微波炉或不可控火候微波炉(定义和分辨方式请见附加内容)
- 筷子或牙签
## 计算
- 鸡蛋的用量为 1 个。
- 盐的用量为 1 g 每个鸡蛋。
- 油的用量为 5 mL 每个鸡蛋。
使用上述条件,计算出计划使用的原材料比例。
## 操作
### 可控火候微波炉
- 准备一个小碗,倒入在上一步计算好的油,撒盐,搅拌均匀。倾斜碗使油沾在碗表面。
- 取出一个鸡蛋,打入小碗。
- 蛋黄表面戳孔。牙签戳 5 个或筷子戳 1 个。
- 放入微波炉,中火 3 分钟。
### 不可控火候微波炉
- 准备一个小碗,倒入在上一步计算好的油,撒盐,搅拌均匀。倾斜碗使油沾在碗表面。
- 取出一个鸡蛋,打入小碗。
- 蛋黄表面戳孔。牙签戳 5 个或筷子戳 1 个。
- 放入微波炉,1 分钟。
- while(太阳蛋 否 大面积成固体状) 用微波炉打(30s);
## 附加内容
while(太阳蛋的熟度 不符合 个人口味) 用微波炉打(1 分钟);
- 不可控火候微波炉:
- 定义: 即无法控制火候仅能控制时长的微波炉。
- 辨别方法: 若在微波炉操作面板上无法找到小火,中火, 大火等字样即为不可控火候微波炉
- 可控火候微波炉:
- 定义:即能控制火候又能控制时长的微波炉,
- 辨别方法: 若在微波炉操作面板上能找到小火,中火,大火等字样即为可控火候微波炉
@@ -0,0 +1,43 @@
# 完美水煮蛋的做法
![完美水煮蛋](https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1yBdnK.img?w=768&h=512&m=6)
科学家研发的循环水煮法,可同时达到蛋黄绵密、蛋白均匀凝固且保留最多营养素的效果。需精准控制温度与时间,难度较高。
预估烹饪难度:★★★★★
## 必备原料和工具
- 新鲜鸡蛋(推荐 AA 级)
- 100°C 沸水锅(直径≥ 15cm)
- 30°C 温水锅(直径≥ 15cm)
- 定时器
- 漏勺
## 计算
每份:
- 鸡蛋 1 个(约 60g
- 100°C 沸水 1500ml
- 30°C 温水 1500ml
## 操作
- 准备两锅水: A 锅维持 100°C 沸水, B 锅维持 30°C 温水
- 用漏勺将鸡蛋放入 A 锅,启动定时器
- 精准**每 2 分钟**将鸡蛋转移至另一锅水
- 重复转移操作共 16 次(总时长 32 分钟)
- 最后一次转移后,在 B 锅静置 30 秒
- 立即放入冰水( 0 摄氏度)终止加热(维持 30 秒)
- 剥壳时从钝端气室处开始,沿纵轴剥离蛋膜
## 附加内容
- 关键参数:
- 蛋黄中心温度:67±1°C
- 蛋白分层温度:
- 外层:100°C→87°C
- 中层:87°C→55°C
- 内层:55°C→30°C
- 营养优势:多酚含量比传统煮法高 23%
@@ -0,0 +1,35 @@
# 微波炉荷包蛋的做法
微波炉荷包蛋是一道简单易做且富含蛋白质的菜。只需要微波炉 120 秒内就可以完成,适合通勤社畜早餐。
预估烹饪难度:★
## 必备原料和工具
- 鸡蛋
- 芝麻油
-
## 计算
每次制作前需要确定计划做几份。一份正好够 1 个人早饭佐餐。
每份:
- 鸡蛋 2 个
- 饮用水 35ml
- 芝麻油 3ml
- 盐 0.8g
## 操作
- 将鸡蛋打入小碗中,用筷子在所有鸡蛋黄上扎 2 个洞,避免加热弄脏微波炉
- 然后向碗内倒入常温饮用水
- 再向碗内倒入食用盐
- 最后加入芝麻油
- 将放好材料的碗放入微波炉中,高火加热 80 秒
- 到达设定时间后,使用抹布垫着手取出成品
## 附加内容
- 微波炉加热前,如果想进一步避免蛋黄和蛋白溅射,可以在碗上盖个盖子避免弄脏微波炉
@@ -0,0 +1,57 @@
# 微波炉蛋糕的做法
微波炉"叮"蛋糕,大约需要 2 分钟 就能搞定!初学者所需时间预计延长至 20 分钟。
预估烹饪难度:★
## 必备原料和工具
- 微波炉
- 能放进微波炉的容器
- 黄油
- 面粉
- 泡打粉(不加吃着像饼)
- 鸡蛋
## 计算
- 鸡蛋🥚 1 个
- 面粉🍚 15g
- 泡打粉🍚 2.5g
- 白(红)糖🍬 10g
- 盐🧂 1g
(口味可选)
- 咖啡粉☕
- 巧克力🍫
- 麦片🍿
- 牛奶🥛
- 坚果🥜
- 饼干屑🍪
- 香蕉🍌
- 非黑暗料理🍆
## 操作
- 加入以下食材,注意不要超过容器的 3/4
- 挖半个鸡蛋大的黄油放进容器, 在微波炉**加热 15 秒**至融化
- 将**巧克力/香蕉** 融化/搅碎成 **颗粒/糊状**
- 打入一个鸡蛋并打散搅和
- 15g 白(红)糖(甜党可以多加些) (见附 4)
- 加入 1g 盐 (**如果后续的口味食材含盐需自己斟酌**)
- 加入 2.5g 泡打粉
- 加入 15g 面粉(筋度没太大影响)
- **加入任何喜欢的口味食材!**(坚果与饼干等干食材不是现在放)
- 搅和至看不见干粉的稠酸奶状
- 加入可选的干燥食材(不包括冲泡粉)在顶端
- 夸赞一下自己🥰
- 微波炉(高火)加热 **1分钟** (至蓬松蛋糕形态)
- 取出杯子(烫手啊啊啊啊↑)并拍朋友圈就可以吃了
## 附加内容
- 在夸赞自己之前的操作可以重复多遍做出更大的蛋糕
- 泡打粉用来让蛋糕更蓬松 大多不含铝 几块钱一包 可以买了在家备着
-**加入任何喜欢的口味食材!** 这一步骤中 若加入**液体**(如牛奶) 请务必确保下一步可以搅和成**稠酸奶状** 建议少量多次加入以防止水分过量而导致成品湿瘪
- **食材不要超过容器的3/4!!**
@@ -0,0 +1,57 @@
# 手抓饼的做法
预估烹饪难度:★★
---
## 必备原料和工具
- 普通面粉
- 开水
- 冷水
- 食用油
-
- 鸡蛋
- 生菜
- 火腿
- 芝士片
---
## 计算
每次制作前需要确定计划做几份。一份正好够 1~2 人食用。
总量(按每份):
- 面粉 200 克
- 开水 100 毫升
- 冷水 50 毫升
- 食用油 15 毫升
- 盐 3 克
- 鸡蛋 1 个
- 生菜 30 克
- 火腿 30 克
- 芝士片 1 片
---
## 操作
1. 面粉放入碗中,加入开水搅拌成絮状,再加入冷水揉成光滑面团,覆盖湿布静置 20 分钟。
2. 面团分成每份约 100 克,搓圆,擀成薄片。
3. 表面均匀涂抹食用油,撒上盐,卷成蜗牛状,松弛 10 分钟。
4. 面团再次擀成薄饼,厚度均匀。
5. 热锅中倒入油,小火煎至两面金黄起泡。
6. 煎好的饼依次铺入煎蛋、生菜、火腿、芝士片等配料,卷起即可。
---
## 附加内容
- 使用开水与冷水混合和面,有助于提升饼皮柔韧度。
- 面团醒发时间不宜少于 20 分钟,否则不易擀薄。
- 可根据个人口味增减配料,建议配料总重控制在 100 克以内。
- 剩余生饼皮可冷藏保存 24 小时,使用时回温擀平即可。
---
@@ -0,0 +1,31 @@
# 桂圆红枣粥的做法
桂圆红枣粥,甜口。补血安神,健脑益智,补养心脾。制作时间需要 70 分钟。
预估烹饪难度:★★
## 必备原料和工具
- 糯米(或大米)
- 红枣
- 桂圆
## 计算
每份:
- 糯米 100g
- 红枣 15 颗
- 桂圆 15 颗
## 操作
- 将桂圆肉扒出,用清水洗两次,放入碗中浸泡 10 分钟
- 红枣用清水洗两次,放入碗中浸泡 10 分钟
- 糯米放入电饭锅中,清水淘米两次后,加入 2000ml 水
- 将桂圆和红枣加入电饭锅
- 打开电饭锅煮饭模式,1 小时后粥成
## 附加内容
对粥的稀稠程度有不同喜好的朋友可以酌情增加或减少水的用量,煮出来的粥是甜的,可以通过控制加入桂圆的数量控制甜度
@@ -0,0 +1,29 @@
# 水煮玉米的做法
大约 15 分钟可以完成制作。
预估烹饪难度:★★
## 必备原料和工具
- 新鲜玉米
- 放得下玉米的锅
-
-
- 糖(可选)
## 计算
- 一个带皮玉米
- 淹过玉米约半节指头的水
- 煮玉米的时候,开始和淡盐水,差不多 2 克盐加 50ml 的水
- 根据口味选择加或者不加糖(可选)
## 操作
- 将新鲜玉米剥去外皮,剩部分玉米皮入锅
- 加入淹过玉米约半节指头的水,加盐和糖
- 水煮开之后转至小火,加盖继续煮 15-20 分钟,玉米煮久点没事。
- 煮熟后沥干水分,冷却后食用。
## 附加内容
@@ -0,0 +1,59 @@
# 温泉蛋的做法
一种传统的日式小吃,可以用于各种佐餐,注意与溏心蛋区分,溏心蛋是蛋黄不熟蛋白熟了,温泉蛋是蛋白不熟蛋黄熟了
预估烹饪难度:★★★
## 必备原料和工具
### 主食材
- 鸡蛋
### 必备工具
- 厨房用温度计(尽量选用带有夹子的温度计)
- 杯子(无特定要求,只要是杯子就行)
### 副食材
额外用作点缀的食材,可选
- 昆布酱油(一种日式的少盐酱油,用于为温泉蛋调味)
- 香葱
## 计算
- 鸡蛋的用量为 1 个,按照您的食量和锅的大小计算。
## 操作
### 煮蛋
- 在锅中盛装一定量自来水,确保水面没过约鸡蛋 3cm,水中插入温度计
- 开火或打开电磁炉,逐渐调整电磁炉功率或火苗大小,使得水温保持在 **70 摄氏度**
- 将鸡蛋放入锅中。鸡蛋不可互相堆叠,应皆在底部,并留有空间可以晃动
- 保持当前温度 **25 分钟**
- 准备一杯冰水
- 捞出鸡蛋,并立刻放入冰水中,**等待 3 分钟**
- 将鸡蛋打入小碗,完成制作
## 附加内容
### 流程图解
``` mermaid
graph TD
A[锅中加水,插入温度计] --> B[控制水温到70℃]
B --> C[放入鸡蛋,保持水温为70℃ 25分钟]
B --> D[准备冰水]
C --> E
D --> E[鸡蛋捞出放入冰水,等待3分钟]
E --> F[鸡蛋打入小碗]
```
### 备注说明
- 若使用机械式温度计(无需供电)则温度计探头需没入水中至少 6cm,若使用电子温度计则无特殊要求
- 锅可以采用稍厚的锅,方便控制温度
- 虽然 70 摄氏度 25 分钟已经完全可以杀死沙门氏菌,但还是要尽量少吃,或购买正规可生食鸡蛋制作
@@ -0,0 +1,33 @@
# 溏心蛋的做法
喜欢健身的小伙伴可以在每颗鸡蛋中获得 6 克蛋白质。大约 15 分钟可以完成制作。
预估烹饪难度:★★★
## 必备原料和工具
- 鸡蛋
- 电锅
-
- 秒表(可选)
## 计算
- 鸡蛋 1 颗或更多(只要您的电锅装得下,不管有几颗鸡蛋都可以)
- 淹过鸡蛋约 2 公分的冷水
## 操作
- 将鸡蛋放入电锅中。鸡蛋不可互相堆叠,应皆在底部,并留有空间可以晃动
- 倒入淹过鸡蛋约 2 公分的冷水
- 开盖,使用最大功率加热至水滚起(大约 85 - 95 度,稍微滚动,不需完全沸腾)
- 关火,盖上盖子,让鸡蛋静置。
- 想要中央有流动的蛋黄,需静置 6 分钟
- 若想要完全煮熟的易碎蛋黄,需静置 10 分钟
- 沥干水分,用冷水冲洗鸡蛋约 1 分钟,即可去壳食用。
## 附加内容
如果觉得鸡蛋不够熟的小伙伴可以依照自己的喜好添加更多的水。
**警告** 溏心蛋有沙门氏菌感染的风险。不建议静置 5 分钟以内。
+30
View File
@@ -0,0 +1,30 @@
# 煎饺的做法
预估烹饪难度:★★
## 必备原料和工具
- 饺子(速冻水饺)
## 计算
每份:
- 饺子一包 (根据个人食量选择, 约 10 - 15 个)
## 操作
- 取出平底锅(不沾平底锅最佳)
- 加入 10ml - 15 ml 食用油
- 开火,放入饺子(尽量平均铺开,不宜堆叠)
- 立刻加入清水,水线没过饺子平均高度的 1/2
- 盖上锅盖(此时炉灶应该处于大火)
- 等待 8 - 10 分钟
- 当锅中水分仅剩 2mm 时, 转中火开始煎制
- 当水分全部蒸发后,摇晃平底锅使饺子受热均匀
- 放入黑芝麻和葱花再焖 10s
- 1 - 2 分钟夹出一个饺子观察底部,若出现金黄色脆皮立即取出
## 附加内容
- 操作时,需时刻观察锅内情况,切记不可分神玩手机。
@@ -0,0 +1,46 @@
# 燕麦鸡蛋饼的做法
燕麦鸡蛋饼是极具营养、便于制作、适宜快速制作的早餐。尤其适宜热爱健身的上班族。
预估烹饪难度:★★
## 必备原料和工具
- 鸡蛋
- 燕麦
- 牛奶 50-100g,能够将燕麦搅拌粘稠即可
- 可根据口味选择增加 50g 蔬菜,如菠菜。
## 计算
- 鸡蛋两个,亦可选择两个蛋清,一个蛋黄。
- 纯干燕麦片 50g (大约等同一个鸡蛋的量)
- 牛奶一盒 约 250ml
- 蔬菜碎叶一把
## 操作
- 将牛奶与干燕麦混合搅拌均匀至黏稠状。
- 将鸡蛋搅拌均匀至颜色单一程度。
- 将鸡蛋液倒入燕麦牛奶中继续搅拌至黏稠、均匀。
- 平底锅中加入一层黄油并覆盖均匀。
- 下入搅拌好的食材,并摊开至饼状。
- 小火加热两到三分钟。如想要加入蔬菜,可以在加热过程中加入碎菜叶。
- 翻面继续加热两分钟。
- 出锅,搭配剩下的牛奶作为早餐。
## 附加内容
- 如果口味偏咸口,可以在搅拌鸡蛋液时加入盐,胡椒等调料。
- 煎饼时使用小火,避免燕麦部分煎糊。
### 营养成分
一份上述早餐的预估营养价值(三大营养素)如下,供热爱健身人群参考*。
- 碳水化合物:39g
- 蛋白质:30g
- 脂肪:19g
- 总热量:450kcal
* 牛奶按照常见的 250ml 计算
@@ -0,0 +1,50 @@
# 牛奶燕麦的做法
高蛋白,粗谷物纤维,饱腹感的懒人快速营养早餐,3 分钟 搞定
预估烹饪难度:★
## 必备原料和工具
- 牛奶(巴氏奶口感更好)
- 燕麦
- 鸡蛋
## 计算
- 🥛 牛奶 280ml/per
- 🍳 鸡蛋 1 个/per
- 🍚 燕麦 40g/per
使用上述条件,计算出计划使用的原材料比例。
## 操作
### 燕麦烹饪常规方法
- 将牛奶倒入早餐杯(冷的即可)
- 准备好 200ml 水,如果是直饮水直接加入燕麦,否则请烧开后加入燕麦
- 水沸后 2 分钟,燕麦煮好
- 煮好的燕麦捞出倒入牛奶中(尽量不要将煮燕麦的水也倒入牛奶,影响口感)
### 燕麦烹饪快速方法
- 将燕麦替换为快煮燕麦
- 将牛奶倒入装有快煮燕麦的容器中并搅拌
- 将混合物放入微波炉中
- 中等火力微波 4 分钟
### 煎蛋烹饪方法
- 热锅,锅内放一层底油,油热后煎鸡蛋,每面煎 20s,考虑调底味(3g 椒盐,可选)
- 关火,装盘
烹饪基本 3 分钟 搞定,做完菜品都是常温,极易入口,一般每次 2 分钟吃完。
> 🥑 水果蔬菜,苏打饼干搭配食用更佳
## 附加内容
- 由于不同微波炉火力不同,故微波炉火力无法精确表明
- 不建议混合物超过容器容量 50%,否则加热过程中内容物极有可能溢出
- 不建议使用玻璃杯进行烹饪,理由同上
@@ -0,0 +1,33 @@
# 空气炸锅面包片的做法
健康饱肚子,适宜正在减脂期的程序员食用
预估烹饪难度:★
## 必备原料和工具
- 面包片
- 空气炸锅
## 计算
每份:
- 面包片(两片)
## 操作
- 取出两片面包片(建议使用粗粮面包片)
- 将面包片**垂直**放入空气炸锅
- 200°C 烘烤 5 分钟
- 取出即可使用
## 附加内容
营养成分表(数据基于全麦面包片)
- 热量 254 千卡
- 蛋白质 12.3 克
- 脂肪 3.5 克
- 碳水化合物 43.1 克
- 膳食纤维 6.0 克
@@ -0,0 +1,34 @@
# 美式炒蛋的做法
美式炒蛋具有松软鲜嫩的口感,与平时的炒蛋不同,美式炒蛋中加入了少量牛奶,使得蛋花更加的细密均匀,并且营养丰富~
预估烹饪难度:★★
## 必备原料和工具
- 鸡蛋
- 全脂牛奶/奶油
- 黄油
-
## 计算
每份:
- 鸡蛋 3 个
- 全脂牛奶/奶油 10g
- 黄油 5 克
- 盐 1 克
## 操作
- 鸡蛋打入大碗中,加盐搅打至起泡,静置 15 分钟
- 黄油切小块入锅,倒入蛋液,开小火不断搅拌
- 黄油一融化,就快速翻动蛋液,将其打碎成细密状,在蛋液大体凝固前关火
- 加入牛奶搅拌 15 秒,至炒蛋湿润绵密,装盘
## 附加内容
- 想吃的更丰富可以在最后一步那里加上炒好的番茄丁,洋葱丁,培根丁,切好的芝士小丁,等等。(总之不会再出水的东东)
- 使用平底锅(不粘锅)。
- 考虑到很多人是一人食就炒一两个鸡蛋,口径比较小的锅或许更方便在锅中均匀搅拌。
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a27348092913ddefff869702dfb52baf8884ff03d0b03ff45630b2b69fb174d1
size 243472
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:471a5f232b22f958bca6e863c66f4ba400abf1fc9e3adb7f9b197df11c406a74
size 755549
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:335516ab7b455cbe5571cde6e164f7a2fce4673195b19515ecc2c73a2e09ea47
size 859558
@@ -0,0 +1,53 @@
<!-- 这是 HowToCook 菜谱仓库中的示例菜谱模板文件。 -->
<!-- 注意:在编写时,中文与英文或数字之间必须有且仅有一个空格。 -->
<!-- 注意:在编写时,标题与正文之间必须有且仅有一个空行。 -->
# 苏格兰蛋的做法
<!-- 标题必须是 `菜名` + `的做法`。和文件名一致。 -->
<!-- 如果有图片更好。 -->
![简易版苏格兰蛋](./egg1.png)
苏格兰蛋是一种用新鲜肉糜裹住鸡蛋,放入油中炸至金黄制成,这个版本比较费事,所以在此就给大家带来简易版,苏格兰蛋复杂版大家就自行查找。
简易版苏格兰蛋是利用手抓饼皮包裹住芝士培根糖心蛋放入油中炸至金黄制成,大约耗时 20-30 分钟。
预估烹饪难度:★★★
## 必备原料和工具
- 鸡蛋
- 手抓饼皮
- 芝士
- 培根
- 空气炸锅或者油锅
## 计算
> 一份量
- 鸡蛋 50g(约 1 颗)
- 手抓饼 1 份-2 份(看鸡蛋大小)
- 芝士片 1-2 片
- 培根片 1-2 片
## 操作
- 用冷水下锅水开 3 分钟后捞出
- 鸡蛋捞出,放入冰水中剥壳更快速也更完整
- 用芝士片包裹鸡蛋
- 培根片包裹鸡蛋
- 手抓饼两端切除以矩形包裹鸡蛋
- 油温 6 成下锅(油面波动,有青烟,筷子插入油中周围泛起气泡即是 6 成温度) 炸制金黄即可
- 空气炸锅 160 度 15 分钟
- 切开即可食用
## 附加内容
- 芝士片、培根片、手抓饼直接淘宝购买即可
![效果图](./egg2.png)
![效果图](./egg3.png)
@@ -0,0 +1,50 @@
# 茶叶蛋的做法
茶香浓郁,鲜香可口的高蛋白快速营养早餐,大约耗时 30 分钟。烹饪略微耗时,可以周末尝试,做一次大约够 2-3 个人吃。
预估烹饪难度:★★★
## 必备原料和工具
- 鸡蛋
- 八角
- 香叶
- 桂皮
- 茴香
- 冰糖
- 红茶
- 生抽
- 老抽
- 食盐
## 计算
- 鸡蛋 400g(约 8 颗)
- 八角 4g(约 2 颗)
- 香叶 0.5-1g(约 2 片)
- 桂皮 3g1 小块)
- 茴香 5g
- 冰糖 15g
- 红茶 20g
- 生抽 15g
- 老抽 25g
- 食盐 3g
使用上述条件,计算出计划使用的原材料比例。
## 操作
- 用冷水将鸡蛋煮熟,大火大约 8 分钟(根据自家厨具决定)
- 鸡蛋捞出,过冷水
- 将鸡蛋互相碰撞,使每个鸡蛋产生裂缝
- 将鸡蛋下锅,放入八角,香叶,桂皮,茴香,冰糖,红茶,生抽,老抽,食盐
- 加水直至没过鸡蛋
- 大火煮开之后,转中小火煮 15 分钟
> 中火煮15 分钟之后,捞出料渣,鸡蛋再浸泡一会口感更佳
## 附加内容
- 鸡蛋捞出过冷水是为了让鸡蛋和壳之间产生间隙
- 食盐可根据个人口味选择不加
- 八角,香叶,桂皮,茴香,冰糖,自己没有这么多食材可以买现成的卤料包
@@ -0,0 +1,30 @@
# 蒸水蛋的做法
蒸水蛋(北方有些地区叫鸡蛋糕儿)都是饭店的好吃,如何自己做水滑嫩香的蒸水蛋,本教程包教包会!
预估烹饪难度:★★
## 必备原料和工具
- 新鲜鸡蛋
- 热水
- 锡纸或保鲜膜
## 计算
- 鸡蛋两只
- 盐 2g
- 热水 260ml
## 操作
- 鸡蛋打入碗中,打散
- 取其他容器,倒入 1.5 倍(半个蛋壳为 0.5 倍水)于蛋液的温水(温度 20~30),将盐倒入水中化开
- 将盐水倒入鸡蛋液中,顺时针或逆时针单方向搅拌均匀,气泡之类的可以用舀出丢弃,过筛则口感更加。
- 使用锡纸包裹盛蛋液的碗(或用盘子盖住),置入提前带盖并加入大约 3cm 深度水的锅中
- 中火烧至水开,转最小的火继续蒸 4 分钟
## 附加内容
- 一般出锅稍晾即可食用,保留鸡蛋原香的终极口感
- 也可加入蒸鱼豉油,葱花香油作为佐料。
@@ -0,0 +1,33 @@
# 蒸花卷的做法
蒸花卷是一道简单易做的菜。能补充碳水化合物,膳食纤维。一般初学者只需要半小时即可完成。作为快手早餐,学会做之后,再也不会早上饿肚子了。
预估烹饪难度:★★
## 必备原料和工具
- 冷冻花卷
- 圆碟子
- 蒸架
- 水 400ml
## 计算
- 冷冻花卷 5 个(女生分量 3 个即可)(可以在超市、各种买菜平台购买)
- 圆碟子,直径 28cm
- 蒸架,直径 20cm
- 水 400ml
## 操作
- 从花卷的包装袋中取出 5 个花卷
- 把花卷平铺在碟子上,尽量不用重叠
- 往锅里倒入 400ml 水,把蒸架放里面,把装花卷的碟子放在蒸架上,盖上锅盖。
- 开大火加热,直至水沸腾。
- 转中火加热 15 分钟
- 开盖用手感受花卷的表面温度,如果不够热,就继续盖上盖子加热,否则就可以关火出锅。
- 碟子取出放凉至 50 度即可食用
## 附加内容
- 操作时,需要注意观察锅里的水不能少于 50ml。
@@ -0,0 +1,40 @@
# 蛋煎糍粑的做法
蛋煎糍粑做法很简单,不需要太多的厨艺基础~
蛋煎糍粑热量高,美味+顶饿+便宜,只需十分钟就可以完成~
预估烹饪难度:★★
## 必备原料和工具
- 鸡蛋
- 糍粑
- 白糖或红糖
## 计算
每份:
- 糍粑 两块
- 红糖 10g (建议 8g - 15g 之间)
- 鸡蛋 1 个
- 食用油 10-15ml
- 食用盐 2g
## 操作
- 把糍粑切成长方形小块,便于后面煎
- 碗里打入一个鸡蛋并把鸡蛋搅碎,加入 2g 食用盐
- 将切好的小糍粑依此放入搅碎的鸡蛋里面,涂抹完糍粑双面为止
- 锅里倒入植物油 10ml ,把涂抹好的糍粑小块放进去小火慢慢煎软。
- 将剩下的鸡蛋液慢慢倒在糍粑表面
- 用筷子或者勺子为糍粑翻面,来回煎至金黄色后开吃
## 附加内容
- 放糍粑进去时候注意把糍粑间隔开来,防止粘在一起
- 鸡蛋的量根据糍粑的量而定
- 糖的量根据个人喜好
- [蛋煎糍粑教程](https://www.dachu.co/recipe/378826)
@@ -0,0 +1,36 @@
# 金枪鱼酱三明治的做法
饱腹感很强的懒人早餐,营养很丰富,高蛋白,大概 5 分钟搞定。可以配着牛奶、咖啡等饮品一起吃。
预估烹饪难度:★
## 必备原料和工具
- 水浸金枪鱼罐头(不建议用油浸,会很腻)
- 方形吐司片
- 蛋黄酱
- 俄式酸黄瓜汁
- 芝士片(可选)
- 火腿片(可选)
- 轻食机
## 计算
- 水浸金枪鱼 65g
- 方形吐司片 2 片
- 蛋黄酱 50 mL
- 俄式酸黄瓜汁 10-15mL(可根据个人口味调整)
## 操作
- 将金枪鱼、蛋黄酱、俄式酸黄瓜汁倒入碗中,用勺子搅拌,保证将金枪鱼块搅碎,酱整体呈糊状,并备用
- 将 1 片吐司放在轻食机上
- 将做好的金枪鱼酱涂抹到吐司上,建议 10-15ml
- 将另一片方形吐司片覆盖在上面,并按压轻食机,开机
- 待轻食机自动停止加热,即可装盘使用
## 附加内容
- 金枪鱼酱可以在前一天晚上在冰箱冷藏
- 金枪鱼酱建议冷藏时间不超过一周,切需要使用保鲜膜盖住
- 注意在按压操作之前不要将轻食机电源接通,以免引发安全问题
@@ -0,0 +1,38 @@
# 鸡蛋三明治的做法
10 分钟的简易鸡蛋三明治 🥪
预估烹饪难度:★★
## 必备原料和工具
- 鸡蛋
- 吐司
- 培根
- 黄油
- 蛋黄酱
-
- 黑胡椒
## 计算
- 鸡蛋 1 个
- 吐司 2 片
- 培根 2 片
- 黄油 10 g
- 蛋黄酱 20g
- 盐 1g
- 黑胡椒 2g
## 操作
- 吐司切去四边,备用
- 鸡蛋煮熟,捣碎
- 混合鸡蛋、蛋黄酱、盐、黑胡椒
- 锅中加入黄油,煎熟培根
- 组装吐司,在两片吐司间加入制作好的鸡蛋酱及培根
- 四边形吐司切成三角形装盘
## 附加内容
- 也可加入芝士、酸黄瓜等食材
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fc1b51a258dedd63599ac30e8ff0f861e603f0d8bdc4da9e5cc4cc07d2f63565
size 328386
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cb408f21b672f58ddadf7f57b0998c8617538fcf95fe13a0b947f9847089ed61
size 397052
@@ -0,0 +1,62 @@
# 油泼辣子的做法
![image](./口水鸡+油泼辣子.jpg)
![image](./油泼辣子.jpg)
制作耗时 10 分钟
预估烹饪难度:★★★
## 必备原料和工具
- 蒜头
- 干辣椒面
-
- 熟白芝麻
- 小米椒
- 花生油(可用菜籽油替换)
- 家庭小陶瓷碗
- 家庭铁勺子
- 五香粉 (可选)
- 草寇(可选)
- 小葱 (可选)
- 八角
- 花椒
- 香叶
- 白芷
- 姜片(可选)
-
- 白醋
## 计算
- 蒜头 1 个
- 干辣椒面 100 克
- 盐 5 克
- 熟白芝麻 15 克
- 小米椒 1 个
- 花生油 150 毫升 (可用菜籽油替换)
- 五香粉 10 克(可选)
- 草寇 1 个(可选)
- 小葱 3-5 根(可选)
- 其他配料:八角(1)、花椒(20-50 粒都可,看个人口味)、香叶(2-3 片)、白芷(2-3 片)、姜片(大拇指粗细的姜切片)(可选)
- 糖 30 克
- 白醋 5 ml(大概就是小铁勺子的量)
## 操作
- 拿出蒜头掰 2 个`小蒜头`去皮
- 拿出砧板剁碎`小蒜头``小米椒`
- 拿出碗倒入`花生油`
- 油热放入`其他配料``小葱`,等到香料变焦,捞出扔掉
- 拿出铁锅将碗内的油放入加热 2 分钟(菜籽油烧至冒烟)
- 此时是空碗
- 往空碗加入`干辣椒面``白芝麻``蒜末``小米椒``盐``五香粉``草寇`作为"调料"
- 关火将油温冷却至 `210` 摄氏度
- 将锅内热油倒入碗内并用勺子搅拌即可(可以在 `165` 摄氏度时加入同样"调料"的碗最后进行混合进行增辣)
- 倒入热油稍微搅拌后放入白醋,此时会重新沸腾。继续进行搅拌,白醋增香。
- 油泼辣子冷却到温热放白糖和味精,白糖可以是辣味柔和,不会那么的呛口
## 附加内容
- 五香粉、草寇作为"调料"加入,可以增加香味,使油泼辣子更香
+25
View File
@@ -0,0 +1,25 @@
# 油酥的做法
油酥是由面粉与热油混合调制的,通常在烙饼时涂点油酥,可以使得饼子层层分明,外酥里软,口感更佳。
预估烹饪难度:★★
## 必备原料和工具
- 面粉
-
-
## 计算
- 油 = (要烙饼的张数 * 10ml)
- 盐 = (要烙饼的张数 / 2g
- 面粉 = (要烙饼的张数 / 0.13)g
## 操作
- 面粉盛小碗里,加入盐
- 加入 200 度的热油
- 用筷子将其搅拌成无固状物体的糊状。
## 附加内容
@@ -0,0 +1,42 @@
# 炸串酱料的做法
炸串酱料,号称淋袜子都好吃,新手友好,预计用时 10 分钟。
预估烹饪难度:★★
## 必备原料和工具
- 干辣椒面(粗细都准备)
- 孜然粉
- 胡椒粉
- 五香粉
- 花椒粉
- 十三香
- 麻辣鲜
- 白芝麻
## 计算
- 干辣椒面 60 克
- 孜然粉 20 克
- 胡椒粉 10 克
- 五香粉 15 克
- 食盐 20 克
- 花椒粉 15 克
- 鸡精 8 克
- 十三香 5 克
- 麻辣鲜 5 克
- 白芝麻 30 克
## 操作
- 所有原料在容器内混合,搅拌均匀。
- 锅里烧热油,油的用量以在容器内没过所有原材料为佳。
- 分三次淋入热油,每次 1/3,同时搅拌。
- 最后放入香油 10ml,生抽 10ml,花椒油 10ml,蚝油 10ml。
## 附加内容
- 最后一步的调味可按自己喜好添加。
- 不得一次性倒入所有热油,必须分次倒入并搅拌。
- 原料可按比例缩减。
@@ -0,0 +1,35 @@
# 简易版炒糖色的做法
这是简易的糖色的做法。对于更为进阶的技巧和糖色更为进阶的用法,请学习[糖色的炒制](../../tips/advanced/糖色的炒制.md)。
预估烹饪难度:★★★★
## 必备原料和工具
- 糖(任选其一):
- 冰糖:炒出来的`糖色`色泽最为鲜艳,红亮,必须水油炒,不加水融化会很慢
- 白砂糖:必须水油炒,不加水融化会很慢
- 绵白糖:可以不加水
- 炒糖色过程火不要太大!!!电磁炉温度不够,火候过了发苦,不够发甜
## 计算
- `油`100ml
- `开水`500ml
- `糖`(这里以冰糖为例)
## 操作
- 开火,并向锅中倒入 100ml 开水
- 再向锅中倒入 100ml 油,与第一步间隔越短越好,此时锅为大火中火都可以,着急的话可以大火
- 放入冰糖(如果冰糖过于耦合,可以提前敲碎,做到耦合度越低越好)
- 调整火力为中火
- 开始搅拌
- 要一直一直一直搅拌,变成棕褐色,此时**转为小火**
- 再变稀,变红茶色,再变成酱红色后起小泡泡,准备好执行下面的`操作1`or`操作2`
- 小泡泡会逐渐消失,之后会出现大泡泡,大泡泡出现时糖色完成
- 需要在此时快速进行下一步操作(无论哪种操作都一定要提前准备好并快速!否则火候过大糖色发苦),根据菜品派别以及个人口味作出选择
- 操作 1:可以直接加 400ml 开水降温
- 操作 2:也可以加入葱姜蒜花椒等调味品进行翻炒
## 附加内容
@@ -0,0 +1,32 @@
# 糖醋汁的做法
糖醋汁通常情况下由清水、白糖、白醋等制成,有些人喜欢放一些番茄酱来增添不一样的酸甜味或放一些淀粉来增加菜肴汤汁的粘性和浓度,糖醋汁可用于糖醋鱼、糖醋里脊、糖醋排骨等菜品的制作
可依据糖醋汁配制的经典比例 1:2:3:4:5 来调制糖醋汁
预估烹饪难度:★★
## 必备原料和工具
- 清水
- 白糖
- 白醋/米醋
- 料酒
- 生抽
## 计算
- 清水(50ml)
- 生抽(40ml)
- 白糖(30g)
- 白醋(20ml)
- 料酒(10ml)
## 操作
- 按照比例将各调料在小碗中搅拌均匀
- 按不同菜肴的方式处理完毕后,将配制好的糖醋汁倒入锅中
- 根据各菜肴的不同,烹制 5-10 分钟
- 大火收汁,可增加菜的浓度、香味和光泽
## 附加内容

Some files were not shown because too many files have changed in this diff Show More