• [交流吐槽] 码豆过期了
    心疼辛苦攒的码豆了,心累
  • [技术干货] 使用DQN算法玩“2048”游戏
    实验目标通过本案例的学习和课后作业的练习:了解DQN算法的基本概念了解如何基于DQN训练一个小游戏了解强化学习训练推理游戏的整体流程你也可以将本案例相关的 ipynb 学习笔记分享到 AI Gallery Notebook 版块获得成长值,分享方法请查看此文档。案例内容介绍《2048》是一款单人在线和移动端游戏,由19岁的意大利人Gabriele Cirulli于2014年3月开发。游戏任务是在一个网格上滑动小方块来进行组合,直到形成一个带有有数字2048的方块。该游戏可以上下左右移动方块。如果两个带有相同数字的方块在移动中碰撞,则它们会合并为一个方块,且所带数字变为两者之和。每次移动时,会有一个值为2或者4的新方块出现,所出现的数字都是2的幂。当值为2048的方块出现时,游戏即胜利,该游戏因此得名。(源自维基百科) DQN是强化学习的经典算法之一,最早由DeepMind于2013年发表的论文“Playing Atari with Deep Reinforcement Learning”中提出,属于value based的model free方法,在多种游戏环境中表现稳定且良好。 在本案例中,我们将展示如何基于simple dqn算法,训练一个2048的小游戏。整体流程:安装基础依赖->创建2048环境->构建DQN算法->训练->推理->可视化效果DQN算法的基本结构Deep Q-learning(DQN)是Q-learing和神经网络的结合,利用经验回放来进行强化学习的训练,结构如下:神经网络部分神经网络用来逼近值函数,一般采用全连接层表达特征输入,采用卷积层表达图像输入。其损失函数表达为γ经验折扣率,γ取0,表示只考虑当下,γ取1,表示只考虑未来。经验回放经验回放是指:模型与环境交互得到的(s,a,r,s')会存入一个replay buffer,然后每次从中随机采样出一批样本进行学习。采用该策略的优点如下:减少样本之间的相关性,以近似符合独立同分布的假设;同时增大样本的利用率。探索策略一般采用贪婪探索策略,即agent以ε的概率进行随机探索,其他时间则采取模型计算得到的动作。DQN的整体结构可以简单的表示为:​DQN论文Nature DQN论文Nature DQN在DQN的基础上,采用两个结构一样的网络,一个当前Q网络用来选择动作,更新模型参数,另一个目标Q网络用于计算目标Q值。这样可以减少目标Q值和当前的Q值相关性。2048游戏环境简介2048环境来源于GitHub开源项目,继承于gym基本环境类。玩家可以上下左右移动方块,如果方块数字相同,则合并且所带数字变成两者之和。当值为2048的方块出现时,则获得胜利。结束标志只要出现非法移动,即移动的方向的数字无法合并,则该局结束。相比较于传统的可试验多次更加严格,难度提高。奖励函数奖励值为当前方块和累加最大合成数字最大能合成4096注意事项本案例运行环境为 Pytorch-1.0.0,支持 GPU和CPU 运行,请查看《ModelAtrs JupyterLab 硬件规格使用指南》了解切换硬件规格的方法;如果您是第一次使用 JupyterLab,请查看《ModelAtrs JupyterLab使用指导》了解使用方法;如果您在使用 JupyterLab 过程中碰到报错,请参考《ModelAtrs JupyterLab常见问题解决办法》尝试解决问题。实验步骤1. 程序初始化第1步:安装基础依赖!pip install gym第2步:导入相关的库import sysimport timeimport loggingimport argparseimport itertoolsfrom six import StringIOfrom random import sample, randintimport gymfrom gym import spacesfrom gym.utils import seedingimport numpy as npimport torchimport torch.nn as nnfrom PIL import Image, ImageDraw, ImageFontfrom IPython import displayimport matplotlibimport matplotlib.pyplot as plt2. 训练参数初始化¶本案例设置的 epochs = 3000,可以达到较好的训练效果,GPU下训练耗时约10分钟。CPU下训练较慢,建议调小 epochs 的值,如50,以便快速跑通代码。parser = argparse.ArgumentParser()parser.add_argument("--learning_rate", type=float, default=0.001) # 学习率parser.add_argument("--gamma", type=float, default=0.99) # 经验折扣率parser.add_argument("--epochs", type=int, default=50) # 迭代多少局数parser.add_argument("--buffer_size", type=int, default=10000) # replaybuffer大小parser.add_argument("--batch_size", type=int, default=128) # batchsize大小parser.add_argument("--pre_train_model", type=str, default=None) # 是否加载预训练模型parser.add_argument("--use_nature_dqn", type=bool, default=True) # 是否采用nature dqnparser.add_argument("--target_update_freq", type=int, default=250) # 如果采用nature dqn,target模型更新频率parser.add_argument("--epsilon", type=float, default=0.9) # 探索epsilon取值args, _ = parser.parse_known_args()3. 创建环境2048游戏环境继承于gym.Env,主要几个部分:init函数 定义动作空间、状态空间和游戏基本设置step函数 与环境交互,获取动作并执行,返回状态、奖励、是否结束和补充信息reset函数 一局结束后,重置环境render函数 绘图,可视化环境def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return zip(a, b)class IllegalMove(Exception): passdef stack(flat, layers=16): """Convert an [4, 4] representation into [4, 4, layers] with one layers for each value.""" # representation is what each layer represents representation = 2 ** (np.arange(layers, dtype=int) + 1) # layered is the flat board repeated layers times layered = np.repeat(flat[:, :, np.newaxis], layers, axis=-1) # Now set the values in the board to 1 or zero depending whether they match representation. # Representation is broadcast across a number of axes layered = np.where(layered == representation, 1, 0) return layeredclass Game2048Env(gym.Env): metadata = {'render.modes': ['ansi', 'human', 'rgb_array']} def __init__(self): # Definitions for game. Board must be square. self.size = 4 self.w = self.size self.h = self.size self.squares = self.size * self.size # Maintain own idea of game score, separate from rewards self.score = 0 # Members for gym implementation self.action_space = spaces.Discrete(4) # Suppose that the maximum tile is as if you have powers of 2 across the board. layers = self.squares self.observation_space = spaces.Box(0, 1, (self.w, self.h, layers), dtype=np.int) self.set_illegal_move_reward(-100) self.set_max_tile(None) # Size of square for rendering self.grid_size = 70 # Initialise seed self.seed() # Reset ready for a game self.reset() def seed(self, seed=None): self.np_random, seed = seeding.np_random(seed) return [seed] def set_illegal_move_reward(self, reward): """Define the reward/penalty for performing an illegal move. Also need to update the reward range for this.""" # Guess that the maximum reward is also 2**squares though you'll probably never get that. # (assume that illegal move reward is the lowest value that can be returned self.illegal_move_reward = reward self.reward_range = (self.illegal_move_reward, float(2 ** self.squares)) def set_max_tile(self, max_tile): """Define the maximum tile that will end the game (e.g. 2048). None means no limit. This does not affect the state returned.""" assert max_tile is None or isinstance(max_tile, int) self.max_tile = max_tile # Implement gym interface def step(self, action): """Perform one step of the game. This involves moving and adding a new tile.""" logging.debug("Action {}".format(action)) score = 0 done = None info = { 'illegal_move': False, } try: score = float(self.move(action)) self.score += score assert score <= 2 ** (self.w * self.h) self.add_tile() done = self.isend() reward = float(score) except IllegalMove: logging.debug("Illegal move") info['illegal_move'] = True done = True reward = self.illegal_move_reward # print("Am I done? {}".format(done)) info['highest'] = self.highest() # Return observation (board state), reward, done and info dict return stack(self.Matrix), reward, done, info def reset(self): self.Matrix = np.zeros((self.h, self.w), np.int) self.score = 0 logging.debug("Adding tiles") self.add_tile() self.add_tile() return stack(self.Matrix) def render(self, mode='human'): if mode == 'rgb_array': black = (0, 0, 0) grey = (200, 200, 200) white = (255, 255, 255) tile_colour_map = { 2: (255, 255, 255), 4: (255, 248, 220), 8: (255, 222, 173), 16: (244, 164, 96), 32: (205, 92, 92), 64: (240, 255, 255), 128: (240, 255, 240), 256: (193, 255, 193), 512: (154, 255, 154), 1024: (84, 139, 84), 2048: (139, 69, 19), 4096: (178, 34, 34), } grid_size = self.grid_size # Render with Pillow pil_board = Image.new("RGB", (grid_size * 4, grid_size * 4)) draw = ImageDraw.Draw(pil_board) draw.rectangle([0, 0, 4 * grid_size, 4 * grid_size], grey) fnt = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf', 30) for y in range(4): for x in range(4): o = self.get(y, x) if o: draw.rectangle([x * grid_size, y * grid_size, (x + 1) * grid_size, (y + 1) * grid_size], tile_colour_map[o]) (text_x_size, text_y_size) = draw.textsize(str(o), font=fnt) draw.text((x * grid_size + (grid_size - text_x_size) // 2, y * grid_size + (grid_size - text_y_size) // 2), str(o), font=fnt, fill=black) assert text_x_size < grid_size assert text_y_size < grid_size return np.asarray(pil_board) outfile = StringIO() if mode == 'ansi' else sys.stdout s = 'Score: {}\n'.format(self.score) s += 'Highest: {}\n'.format(self.highest()) npa = np.array(self.Matrix) grid = npa.reshape((self.size, self.size)) s += "{}\n".format(grid) outfile.write(s) return outfile # Implement 2048 game def add_tile(self): """Add a tile, probably a 2 but maybe a 4""" possible_tiles = np.array([2, 4]) tile_probabilities = np.array([0.9, 0.1]) val = self.np_random.choice(possible_tiles, 1, p=tile_probabilities)[0] empties = self.empties() assert empties.shape[0] empty_idx = self.np_random.choice(empties.shape[0]) empty = empties[empty_idx] logging.debug("Adding %s at %s", val, (empty[0], empty[1])) self.set(empty[0], empty[1], val) def get(self, x, y): """Return the value of one square.""" return self.Matrix[x, y] def set(self, x, y, val): """Set the value of one square.""" self.Matrix[x, y] = val def empties(self): """Return a 2d numpy array with the location of empty squares.""" return np.argwhere(self.Matrix == 0) def highest(self): """Report the highest tile on the board.""" return np.max(self.Matrix) def move(self, direction, trial=False): """Perform one move of the game. Shift things to one side then, combine. directions 0, 1, 2, 3 are up, right, down, left. Returns the score that [would have] got.""" if not trial: if direction == 0: logging.debug("Up") elif direction == 1: logging.debug("Right") elif direction == 2: logging.debug("Down") elif direction == 3: logging.debug("Left") changed = False move_score = 0 dir_div_two = int(direction / 2) dir_mod_two = int(direction % 2) shift_direction = dir_mod_two ^ dir_div_two # 0 for towards up left, 1 for towards bottom right # Construct a range for extracting row/column into a list rx = list(range(self.w)) ry = list(range(self.h)) if dir_mod_two == 0: # Up or down, split into columns for y in range(self.h): old = [self.get(x, y) for x in rx] (new, ms) = self.shift(old, shift_direction) move_score += ms if old != new: changed = True if not trial: for x in rx: self.set(x, y, new[x]) else: # Left or right, split into rows for x in range(self.w): old = [self.get(x, y) for y in ry] (new, ms) = self.shift(old, shift_direction) move_score += ms if old != new: changed = True if not trial: for y in ry: self.set(x, y, new[y]) if changed != True: raise IllegalMove return move_score def combine(self, shifted_row): """Combine same tiles when moving to one side. This function always shifts towards the left. Also count the score of combined tiles.""" move_score = 0 combined_row = [0] * self.size skip = False output_index = 0 for p in pairwise(shifted_row): if skip: skip = False continue combined_row[output_index] = p[0] if p[0] == p[1]: combined_row[output_index] += p[1] move_score += p[0] + p[1] # Skip the next thing in the list. skip = True output_index += 1 if shifted_row and not skip: combined_row[output_index] = shifted_row[-1] return (combined_row, move_score) def shift(self, row, direction): """Shift one row left (direction == 0) or right (direction == 1), combining if required.""" length = len(row) assert length == self.size assert direction == 0 or direction == 1 # Shift all non-zero digits up shifted_row = [i for i in row if i != 0] # Reverse list to handle shifting to the right if direction: shifted_row.reverse() (combined_row, move_score) = self.combine(shifted_row) # Reverse list to handle shifting to the right if direction: combined_row.reverse() assert len(combined_row) == self.size return (combined_row, move_score) def isend(self): """Has the game ended. Game ends if there is a tile equal to the limit or there are no legal moves. If there are empty spaces then there must be legal moves.""" if self.max_tile is not None and self.highest() == self.max_tile: return True for direction in range(4): try: self.move(direction, trial=True) # Not the end if we can do any move return False except IllegalMove: pass return True def get_board(self): """Retrieve the whole board, useful for testing.""" return self.Matrix def set_board(self, new_board): """Retrieve the whole board, useful for testing.""" self.Matrix = new_board4. 定义DQN算法DQN算法分了两部分构造,拟合函数部分-神经网络算法逻辑本身Replay Buffer部分神经网络结构包含三层卷积网络和一层全连接网络,输出维度为动作空间维度。 神经网络部分可自由设计,以训练出更好的效果。class Net(nn.Module): #obs是状态空间输入,available_actions_count为动作输出维度 def __init__(self, obs, available_actions_count): super(Net, self).__init__() self.conv1 = nn.Conv2d(obs, 128, kernel_size=2, stride=1) self.conv2 = nn.Conv2d(128, 64, kernel_size=2, stride=1) self.conv3 = nn.Conv2d(64, 16, kernel_size=2, stride=1) self.fc1 = nn.Linear(16, available_actions_count) self.relu = nn.ReLU(inplace=True) def forward(self, x): x = x.permute(0, 3, 1, 2) x = self.relu(self.conv1(x)) x = self.relu(self.conv2(x)) x = self.relu(self.conv3(x)) x = self.fc1(x.view(x.shape[0], -1)) return xDQN核心逻辑部分class DQN: def __init__(self, args, obs_dim, action_dim): # 是否加载预训练模型 if args.pre_train_model: print("Loading model from: ", args.pre_train_model) self.behaviour_model = torch.load(args.pre_train_model).to(device) # 如果采用Nature DQN,则需要额外定义target_network self.target_model = torch.load(args.pre_train_model).to(device) else: self.behaviour_model = Net(obs_dim, action_dim).to(device) self.target_model = Net(obs_dim, action_dim).to(device) self.optimizer = torch.optim.Adam(self.behaviour_model.parameters(), args.learning_rate) self.criterion = nn.MSELoss() # 动作维度 self.action_dim = action_dim # 统计学习步数 self.learn_step_counter = 0 self.args = args def learn(self, buffer): # 当replaybuffer中存储的数据大于batchsize时,从中随机采样一个batch的数据学习 if buffer.size >= self.args.batch_size: # 更新target_model的参数 if self.learn_step_counter % args.target_update_freq == 0: self.target_model.load_state_dict(self.behaviour_model.state_dict()) self.learn_step_counter += 1 # 从replaybuffer中随机采样一个五元组(当前观测值,动作,下一个观测值,是否一局结束,奖励值) s1, a, s2, done, r = buffer.get_sample(self.args.batch_size) s1 = torch.FloatTensor(s1).to(device) s2 = torch.FloatTensor(s2).to(device) r = torch.FloatTensor(r).to(device) a = torch.LongTensor(a).to(device) if args.use_nature_dqn: q = self.target_model(s2).detach() else: q = self.behaviour_model(s2) # 每个动作的q值=r+gamma*(1-0或1)*q_max target_q = r + torch.FloatTensor(args.gamma * (1 - done)).to(device) * q.max(1)[0] target_q = target_q.view(args.batch_size, 1) eval_q = self.behaviour_model(s1).gather(1, torch.reshape(a, shape=(a.size()[0], -1))) # 计算损失函数 loss = self.criterion(eval_q, target_q) self.optimizer.zero_grad() loss.backward() self.optimizer.step() def get_action(self, state, explore=True): # 判断是否探索,如果探索,则采用贪婪探索策略决定行为 if explore: if np.random.uniform() >= args.epsilon: action = randint(0, self.action_dim - 1) else: # Choose the best action according to the network. q = self.behaviour_model(torch.FloatTensor(state).to(device)) m, index = torch.max(q, 1) action = index.data.cpu().numpy()[0] else: q = self.behaviour_model(torch.FloatTensor(state).to(device)) m, index = torch.max(q, 1) action = index.data.cpu().numpy()[0] return actionreplay buffer数据存储部分class ReplayBuffer: def __init__(self, buffer_size, obs_space): self.s1 = np.zeros(obs_space, dtype=np.float32) self.s2 = np.zeros(obs_space, dtype=np.float32) self.a = np.zeros(buffer_size, dtype=np.int32) self.r = np.zeros(buffer_size, dtype=np.float32) self.done = np.zeros(buffer_size, dtype=np.float32) # replaybuffer大小 self.buffer_size = buffer_size self.size = 0 self.pos = 0 # 不断将数据存储入buffer def add_transition(self, s1, action, s2, done, reward): self.s1[self.pos] = s1 self.a[self.pos] = action if not done: self.s2[self.pos] = s2 self.done[self.pos] = done self.r[self.pos] = reward self.pos = (self.pos + 1) % self.buffer_size self.size = min(self.size + 1, self.buffer_size) # 随机采样一个batchsize def get_sample(self, sample_size): i = sample(range(0, self.size), sample_size) return self.s1[i], self.a[i], self.s2[i], self.done[i], self.r[i]5. 训练模型初始化环境和算法# 初始化环境env = Game2048Env()device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 初始化dqndqn = DQN(args, obs_dim=env.observation_space.shape[2], action_dim=env.action_space.n)# 初始化replay buffermemory = ReplayBuffer(buffer_size=args.buffer_size, obs_space=(args.buffer_size, env.observation_space.shape[0], env.observation_space.shape[1], env.observation_space.shape[2]))开始训练print('\ntraining...')begin_t = time.time()max_reward = 0for i_episode in range(args.epochs): # 每局开始,重置环境 s = env.reset() # 累计奖励值 ep_r = 0 while True: # 计算动作 a = dqn.get_action(np.expand_dims(s, axis=0)) # 执行动作 s_, r, done, info = env.step(a) # 存储信息 memory.add_transition(s, a, s_, done, r) ep_r += r # 学习优化过程 dqn.learn(memory) if done: print('Ep: ', i_episode, '| Ep_r: ', round(ep_r, 2)) if ep_r > max_reward: max_reward = ep_r print("current_max_reward {}".format(max_reward)) # 保存模型 torch.save(dqn.behaviour_model, "2048.pt") break s = s_print("finish! time cost is {}s".format(time.time() - begin_t))6. 使用模型推理游戏¶#加载模型model = torch.load("2048.pt").to(device)model.eval()s = env.reset()img = plt.imshow(env.render(mode='rgb_array'))while True: plt.axis("off") img.set_data(env.render(mode='rgb_array')) display.display(plt.gcf()) display.clear_output(wait=True) s = torch.FloatTensor(np.expand_dims(s, axis=0)).to(device) a = torch.argmax(model(s), dim=1).cpu().numpy()[0] # take action s_, r, done, info = env.step(a) time.sleep(0.1) if done: break s = s_env.close()plt.close()7. 作业请你调整步骤2中的训练参数,重新训练一个模型,使它在游戏中获得更好的表现。
  • [优秀实践] benchmark云手机测评开发项目实践分享
    yy,并安踏画面查询nn鞥难手↵很荣幸地能参与到本次华为云手机benchmark工具开发项目中,本次参与的项目主要目的是实现在移动手机终端上对云游戏以及云手机等各个平台的性能和各项基础指标进行测试。测试内容包括有基础硬件信息、流畅性、稳定性、触控体验和音画质量。在本次项目中,我从初期架构设计到中期模块开发再到后期测试以及文档编写等环节都完整地参与了进来,感受到了完整的开发流程,极大地提高了我的开发能力,受益匪浅。在项目初期,先是由华为方面的老师介绍了项目的总体方案与实现分析,然后项目指导老师给团队的每个成员分配大致的模块和具体的任务,让我们很快的明确了自己要学习努力的方向。我初期负责的主要是云手机的流畅性测试模块。起初,我尝试使用Choreographer编舞者的回调函数来实现对云手机播放视频时画面刷新的fps捕捉,但是在测试过程中发现,通过编舞者来监听手机视频播放的fps会出现虚高的情况,播放一个30帧率的测试视频,但是测试结果会出现高于50帧的情况。经过查询资料发现这是因为编舞者Choreographer的回调是基于VSync信号的,而当画面没有发生变化,画面是不需要重新渲染的,但VSync信号总是会发出来,所以Choreographer.FrameCallback在画面没有重新渲染时也会被回调到。随后,尝试使用其他方法,通过结合使用glsurface和mediaplay成功地监听到了播放视频的fps,并以此为基础完成了计算了云手机的流畅性指标计算。最后,非常感谢华为我们提供了这次项目实践的机会,让我们能实际参与一个一线公司项目的完整开发流程。希望我以后能有更多机会参与到类似的项目中,学到更多的知识。重庆邮电大学-数据分析与智能决策创新团队-唐庐指导老师-刘勇老师
  • [信息速递] 【AOC闯关赛】闯关夺宝,勇者召集,AOC系列闯关赛正式开启
    中奖用户公布       华为云昵称yd_265908769yd_213618615亲爱的用户们,第一期闯关赛活动顺利结束。总回帖数32+,经专家评选,共2位用户获得100元京东券奖励,感谢大家的积极参与。 有一些朋友在第三关闯关答题中出现错误,离成功只差一步,非常可惜。现公布第三关答案,让我们再接再厉!    ★ 问题1: 面向设备侧的驱动包,是什么?       B. SND ★ 问题2: 做驱动包自定义业务时,业务逻辑应该被写入哪个文件中?        A. Python ★ 问题3:GND包分为几部分?分别是什么?       C. 2部分,模型包+配置包 请中奖的小伙伴私信版主或微信添加AOC服务体验官进行礼品登记!也请大家期待下次的活动吧~2022年9月7日--2022年10月7日书籍名称:《iMaster NCE AOC 开放可编程平台》在本帖下回帖 ,谈谈阅读感受,书中所讲架构、能力和应用等内容,对您有哪些帮助?观看下方任意一个视频,在任意渠道进行无屏蔽转发分享(包括但不限制于微信朋友圈、微信群、微博、welink群等),保留后在本帖下截图回帖。★ PC端转发:扫描相关二维码打开转发★ 移动端转发:下方链接直接打开转发1开发HillStone防火墙SND包2开发防火墙封禁GND包★ 问题1: 面向设备侧的驱动包,是什么?        A. GND, B. SND, C. SSP, D. NCE ★ 问题2: 做驱动包自定义业务时,业务逻辑应该被写入哪个文件中?        A. Python, B. Jinja, C. YANG, D. Html ★ 问题3:GND包分为几部分?分别是什么?        A. 1部分,模型包,B. 1部分,配置包,C. 2部分,模型包+配置包,D. 3部分,Runbook+模型包+配置包 上述三关通关完成,由iMaster NCE AOC专家评选优秀参与者,每人奖励100元京东E卡。第一关:●留言点评:如网络作为整个社会数字化、智能化的基础支撑,其本身也需要有数字化的运维手段。本书对网络运维数字化转型提供了解决方案,相关技术实现内容详实,可为数据中心网络从业人员提供最佳参考。--袁航,中国银联金融科技研究院高级研究员第二关:● 转发截图:如第三关:●问题一:xxx;●问题二:xxx;●问题三:xxx----------------------------------------------------------------------------------------------重要说明:如有无法上传图片问题,可以将图片大小控制在100k以下尝试,或联系体验官解决。每一关活动可以分开回帖,最后一关完成,回帖时请写上“通关完成”字样。活动解释权归AOC社区所有。请获得京东E卡的用户在1个月内与AOC服务体验官联系(vx:huawei520aoc),进行实名礼品登记发放。
  • [云实验室] 华为云云游戏解决方案场景应用及部署体验
    终于玩到了,激动人心
  • [行业资讯] 微软Xbox宣布成立单独的“云游戏”部门,将带来专属于云的体验
    在2022年游戏开发者大会上,微软Xbox Game Studios Publishing正式宣布成立了新的“云游戏”部门。根据微软的说法,该部门“将与游戏工作室合作开发云原生游戏,并将它们引入Xbox生态系统”。该部门由去年加入Xbox担任云游戏总监的Kim Swift领导。Kim Swift曾是Valv的《传送门》游戏项目负责人和设计师,之后担任了《求生之路》系列的设计师和艺术家,后担任谷歌Stadia云游戏平台的游戏设计总监。转载于CSDN微信公众号
  • [云计算周刊] 暴雪云计算宣布推出基于Filecoin网络的“云游戏”解决方案
    来源标题:暴雪云计算宣布推出基于Filecoin网络的“云游戏”解决方案据MACQUARIE官方消息,深耕分布式存储领域的暴雪云计算正在重点部署为网络视频游戏提供云计算服务的IPFS网络建设。暴雪云计算联合澳大利亚麦格理集团(MACQUARIE), 美国费城大学数据中心,2K Games游戏厂商,中国网络游戏产业联盟及中国通信工业协会数字经济专委会等机构在全球首推基于Filecoin网络的“云游戏”解决方案。该方案由暴雪云计算技术团队经过长期的优化测试后获得的最佳方案。未来暴雪云计算矿工将成为“云游戏”服务商。随着IPFS技术的全球化推进,为低成本高标准实现云游戏商业落地提供了良好的可行性。同时,暴雪云计算coo张磊也表示,未来将联合各大节点数据中心加速布局全球节点,全力推进”云游戏”进程,暴雪云计算也会持续加大这方面的研发投入。云游戏是以云计算为基础的游戏方式,在云游戏的运行模式下,所有游戏都在服务器端运行,并将渲染完毕后的游戏画面压缩后通过网络传送给用户。在客户端,用户的游戏设备不需要任何高端处理器和显卡,只需要基本的视频解压能力就可以了。这意味着游戏玩家可以不用购买昂贵的专业游戏设备和电脑的情况下就可以玩上高品质游戏。在IPFS技术的加持下,云游戏方案得已飞速发展,突破众多技术瓶颈。相信在不就的将来,玩家只需要一台显示器连接网络就可以流程的遨游在网游世界。
  • 5G让云游戏在云端高速畅行
    云游戏是一种以云计算技术为基础的在线游戏方式,具 有免配置、免下载、跨平台、跨终端的特性。 云游戏场景实现对终端限制的突破         对于数量庞大的低端机型用户而言,由于存储空间、内 存配置、手机 CPU 性能等设备条件方面的限制,运行热门游 戏往往存在诸多问题;对于家庭用户而言,主机游戏硬件及 CD-KEY 价格昂贵,而传统 TV 游戏内容相对粗糙,难以提 供优质的游戏体验。云游戏的发展解决了这些痛点,让用户 在云端实现“秒玩”热门手机游戏及主机游戏,真正做到随心 所欲、“即点即玩”、尽情畅享海量游戏大作。         在云游戏场景下,用户的游戏设备只需具备基本的视频 解压能力和联网功能,而无需任何高端处理器或显卡的支持 即可进行游戏。云游戏的出现和发展解决了长期以来的终端 限制难题,让用户不用购买高级、昂贵的设备,在能够播放 视频的多媒体终端,就可以作为游戏主机终端,随时随地畅 玩精彩游戏,拓展了游戏的用户群体,满足不同层次玩家的 差异化需求。 5G 与云游戏业务相辅相成         过去,游戏的精美画质和动态渲染只能在专业游戏主机 上实现,现在,云游戏业务可借助 5G 高带宽通过云主机处 理在 5G 手机上以视频流的形式实现。同时,5G 超低延迟特 性与边缘节点计算能力相结合,可在 5G 手机上畅快运行响 应要求在 20ms 以内的主机游戏。因此,云游戏的市场需求 也将进一步推动 5G、千兆网的发展和普及。         云游戏作为未来的市场重点,具有广阔的业务前景。一 旦打开从云游戏平台到用户间的壁垒,搭建出成熟的云游戏 解决方案,便有机会探索出更加丰富的服务模式及多样的盈 利方式,为行业内的创意人员提供了一片亟待开发的沃土。云游戏业务实现原理        依靠云端部署的高性能渲染节点, 通过串流技术把游戏画面实时推送到终端。游戏中所有的计 算(包括画面渲染、数据同步、交互逻辑等)全部在云端服 务器进行,利用 5G 网络的超低延迟特性配合强大的边缘节 点计算能力,并通过互联网接受用户的输入指令,再将处理 完成后的最终画面结果显示在用户的前端设备上。 媒体终端        包括手机、平板电脑、笔记本电脑、TV 等 能播放视频的多媒体终端,都可以作为游戏主机终端; 业务平台        负责调度、鉴权、计费等相关业务功能; 渲染节点        利用高性能 GPU 实时完成复杂的游戏渲染 和串流。         支持游戏可在云端全天候运行,完成复杂的游戏渲染和 串流后将游戏场景以高清视频流的形式返回媒体终端,实现 在电视机顶盒或普通手机上玩 3A 级主机游戏大作和海量休 闲游戏高响应无缝游戏衔接体验。          在云游戏场景中,关键性的技术包括:         游戏实时性:游戏的整体延迟包括了游戏逻辑运算时间、 音画渲染的时间,加上编码的延时、网路传输的延时、客户 端解码的延时、客户端向服务端发送控制信息的延时,云游 戏的实时性需要达到可令玩家接受的程度。此外还要依靠硬 件和网络本身的性能。         虚拟化技术:游戏依赖 GPU 渲染,GPU 的虚拟化是实 现云游戏的必要条件。         实时网络传输:同样得益于短视频、直播业务的发展, 已有的网络协议优化技术为云游戏奠定了一定的基础,可以 进化为适应大带宽、低时延的网络优化技术。
  • [体验官] 沙箱实验室华为云云游戏解决方案场景应用及部署体验
    看见云手机,眼前一亮,耳闻过没亲手用过,倒底是什么样子的呢?但是今天的实验不是很顺利,实验手册这里是这样的,ADB公网连接设置在这里。实际实验环境是这样的:木有,翻了半天,哪都木有~好吧好吧,放着慢慢玩~
  • 泛云游戏Server端套件开发包
    泛云游戏Server端套件软件开发包主要包含:1、Server安装程序(包含安装密码)2、数据库表模板3、主机License申请工具4、Server启动bat脚本模板
  • 泛云游戏部署操作指南
    按照操作指南在游戏主机安装部署Cloud Streaming套件Server端程序和其他配套软件,申请主机License即可(License申请方法见操作指南)
  • [云早报] Google 发布云游戏平台 Stadia(北京时间)3月20日,星期三
    云早报,(北京时间)3月20日,星期三【云头条】Google 发布云游戏平台 Stadia在今天凌晨的 GDC 2019 上,Google 公布了「面向所有人的」云游戏平台 Stadia,是一款不受硬件性能限制的跨平台云游戏服务。平台通过服务器运行游戏并串流到用户的设备上,无论是手机、平板还是电脑等设备均可通过 Chrome 浏览器进行游戏,无需安装,游戏存档将会通过云端同步。Google Stadia 支持 4k/60 帧的游戏画面输出,此外,与游戏视频的结合也非常紧密。玩家在看完游戏预告片之后直接玩游戏,甚至还提供了云游戏「接关」的功能——你可以在看游戏直播的时候,随时加入主播的游戏,并接着游戏主播的存档继续打游戏。谷歌表示,这是一个“适合所有人的游戏平台”。此外,数据通过谷歌服务器传输,吃鸡等多人游戏中不会再出现外挂作弊行为;同时谷歌还公布了“Stadia”云游戏手柄,包括三种配色,通过WiFi连接到云。【华为云新闻】华为云在香港拓展AI和区块链服务3月19日消息,据报道,华为在其2019年华为云香港峰会上宣布,将投入更多技术和资源服务香港及亚太市场,华为云企业智能全栈人工智能(AI)服务将于3月底在香港上线,将在香港发布商用区块链服务,并将在香港发布第三个可用区。【互联网新闻】1.京东回应:要求员工梳理亲属关系昨天,有网友爆料表示京东要求员工梳理亲属及同学关系,并要求当日下班前提交。对此,京东回应称,这只是一个日常管理举措,旨在进一步提升管理效率,建立一个人际关系简单透明、晋升更加公平的职场环境。网友评论:从今往后,你我的情谊仅限包邮...2.小米去年营收低于格力 雷军输掉与董明珠**局3月19日,小米集团公布截至2018年12月31日的第四季度及全年财报。2018年第四季度,小米集团营收444.2亿元人民币,同比增长26.5%,低于市场预估的462.4亿元人民币。小米财报发布后,外界对于雷军和董明珠在五年前的**局也十分关注。随着小米2018年全年业绩的出炉,以及格力曾于今年1月发布的2018年业绩预告,全年营收将在2000亿元-2010亿元之间,这意味着二人的**局胜负已分,最终董明珠胜出,而雷军落败。网友评论:110吗,有两个人Du 博,金额高达10亿,围观的也很多。3.世界知识产权组织:华为去年国际专利申请量全球第一3月19日,世界知识产权组织(WIPO)公布了去年通过该组织提交的全部国际专利,其中有50.5%来自亚洲,中国科技巨头华为的专利申请量高达5405件,位居全球第一。WIPO的数据显示,华为去年提交了5405件国际专利申请,较2017年的4024件增加近1400件,创下WIPO历史上由一家公司提交的国际专利申请量的纪录。网友评论:想问菊厂的同事,你们贡献了多少?4.苹果更新iMac:主要升级处理器继前天发布了新款10.5英寸iPad Air和iPad mini后,苹果公司昨晚又在官网对iMac进行了更新。这次更新只面向搭载视网膜4K显示屏的21.5英寸iMac、搭载5K显示屏的27英寸iMac,主要是CPU和GPU升级。其中,21.5英寸iMac配备英特尔第八代四核处理器或六核处理器,GPU为Radeon Pro Vega 555X或560X;27英寸款iMac最高可选英特尔第九代六核或八核处理器,GPU可选配Radeon Pro Vega 570X、575、580X。新款搭载4K显示屏的21.5英寸iMac起售价为10199元,5K显示屏27英寸iMac起售价为14199元。网友评论:就问一句,5G呢?5.腾讯回应多闪弹窗消息:纯属偷换概念的无稽之谈3月19日,字节跳动旗下视频社交App多闪向用户发送弹窗,称“根据腾讯公司强烈要求,用户在微信/QQ上的账户信息,包括头像、昵称的权益属于腾讯公司,如果您多闪的头像昵称与微信/QQ一致,需要修改在多闪或微信/QQ上的头像昵称。如果昵称是真名,我们觉得可以保留。”对此,腾讯回应称,纯属偷换概念的无稽之谈。抖音违反诚信原则超范围和违规使用来源于微信/QQ的用户头像、昵称等数据,并擅自将腾讯提供给抖音的微信/QQ账号授权登录服务提供给多闪使用。腾讯表示针对此不正当竞争以及侵犯用户合法权益的行为,已向法院提起诉讼并同时申请了行为禁令。网友评论:求求你们别再打了,看的很慌...6.腾讯掀起史上最大一轮中层裁撤3月19日消息,据报道,数名消息人士证实,2018年12月内部员工大会后,腾讯开始裁撤一批中层干部。腾讯中干主要包括助理总经理、副总经理、总经理级别,有时一些副总裁也被认为在中干范围内。整个腾讯大概有两百多名中干,此轮调整比例约为10%,有战略发展部的腾讯员工认为,实际甚至超过了这个比例。这是腾讯历史上第三次组织架构调整的后续动作之一。网友评论:小马哥:我发起狠来自己都不放过。7.英伟达宣布亚马逊AWS将使用其T4芯片3月19日上午消息,英伟达今天宣布亚马逊将使用其T4数据中心芯片。该公司表示,他们的T4 Tensor Core GPU将在未来几周通过EC2 G4部署到AWS中。英伟达去年9月曾经宣布与Alphabet的谷歌云平台合作,为其提供T4芯片。除了谷歌外,百度也在数据中心里使用T4芯片,阿里巴巴和微软同样计划采用这种产品。8.美国开建最快百亿亿次超算 2021年交付上线3月19日消息,据外媒报道,美国能源部长里克o佩里(Rick Perry)和参议员迪克o德宾(Dick Durbin)今天在阿贡国家实验室(Argonne)出席了一场仪式,公布了美国下一代超级计算机的详细信息。美国能源部的新超算将由英特尔在阿贡国家实验室建造,这将是美国第一台每秒可进行1百亿亿次浮点计算(Exaflop)的超算。9.2019胡润全球少壮派白手起家富豪榜发布:黄峥全球第二,国内第一 胡润研究院今日发布《2019胡润全球少壮派白手起家富豪榜》,统计了全球40岁以下(含40岁)且白手起家的十亿美金富豪。Facebook的马克•扎克伯格以5400亿元的财富稳居榜首;Facebook的联合创始人达斯汀•莫斯科维茨和拼多多的黄峥分别以1000亿元的财富并列第二。其中,拼多多的黄峥仅用了2年时间就创造了第一个十亿美金,是世界历史上最快的一个。张一鸣花了5年时间赚到第一个十亿美金,和马克•扎克伯格一样快。网友评论:不要小瞧五环外人民的战斗力10.全国结婚率创新低根据国家统计局和民政部的数据,2018 年全国结婚率为 7.2‰,为 2013 年以来的最低。从各省市自治区来看,经济越发达结婚率越低,譬如,2018 年上海、浙江结婚率分别为 4.4‰ 和 5.9‰,广东、北京、天津等地结婚率也偏低。网友评论:看到这个报告,不知道为啥,竟然感觉好放心的样子【本周新闻】大众汽车放弃 AWS 转 Azure:因对其恐惧 (北京时间)3月18日,星期一亚太云计算市场报告:腾讯份额超谷歌(北京时间)3月19日,星期二【更多内容,欢迎访问】http://forum.huaweicloud.com/forum.php?mod=forumdisplay&fid=569&filter=typeid&typeid=266(内容来源于互联网,如侵犯您的合法权益或有其他任何疑问,请联系:huaweicloud.bbs@huawei.com沟通处理。谢谢!)
  • [云早报] 亚马逊或将开发云游戏产品(北京时间)1月14日,星期一
    云早报,(北京时间)1月14日,星期一【云头条】亚马逊或将开发云游戏产品据Information消息,亚马逊正在开发一种类似于索尼的PlayStation Now的游戏服务,将通过互联网流媒体进行视频游戏,如果一切顺利,亚马逊或将最早于明年发布云游戏产品。亚马逊早在几年前就推出了面向第三方的云计算服务,包括数据库服务、处理器资源租赁、网络存储、应用软件服务等,据称目前亚马逊招聘页面正在西雅图和加利福尼亚雇用至少两名云游戏软件开发工程师,似乎已经下定决心进军这一项目。【华为云新闻】华为云发布新Slogan“+智能 见未来”,及HCS混合云解决方案人工智能作为下一轮科技革命的关键元素,正在进入越来越多的行业,用AI的技术和理念去解决现在和未来的问题,将是企业构建竞争力的关键。今天,“华为云普惠AI”年度峰会在北京举行,华为公司副总裁、云BU总裁郑叶来发布了华为云全新品牌口号:“+智能 见未来”。随着人工智能成为一种新的通用技术, “+智能”将成为一种基本生产力,推动各行各业发生前所未有的改变。(查看全文)【互联网新闻】1.束昱辉被撤销天津市工商联执委、常委、市商会副会长等职务依据《中国工商业联合会章程》和有关规定,天津市工商联和河西区工商联分别于近日召开常委会议,决定撤销束昱辉十四届天津市工商联执委、常委、市商会副会长,十二届天津市河西区工商联执委、常委、副主席等职务,开除其天津市河西区工商联会籍。网友评论:有多少人还沉溺在保健品的骗局中~2.中央气象台13日发布大雾黄色预警中央气象台13日18时发布大雾黄色预警预计13日夜间至14日上午,山东西部和南部、河南中东部、江苏大部、安徽中北部、湖北中部、四川盆地西部、浙江北部、上海等地有大雾,其中,江苏中部、安徽北部和河南中部等地的部分地区有能见度不足200米的强浓雾,局地有能见度不足50米的特强浓雾。网友评论:有多少同学看成了雾霾?3.云歌将发布社交新品,快播创始人王欣能否玩转社交?多次预热后,快播创始人王欣终于确认新产品方向。1月13日,王欣在微博上透露,云歌人工智能将在1月15日发布社交新品。云歌人工智能为深圳云歌的两大业务之一,王欣目前的身份为深圳云歌创始人兼CEO。在业内人士看来,社交产品抓取用户的能力突出,这是众多互联网企业纷纷入局的原因,现阶段社交产品能否出挑的因素在于区隔的定位和运营,更在于能否把握住社交形式转变的大趋势。网友评论:聊不完的天...4.人社部:研究企业降低社保费率的实施方案人社部部长张纪南表示,将实施高校毕业生就业创业计划,基层成长计划和青年就业启航计划等专项计划;加快会同有关部门研究企业降低社保费率的实施方案;提高创业担保贷款额度,将个人申请额度从10万元提高到15万元,小微企业申请额度从200万元提高到300万元。网友评论:好事!~5.我国首次实现5G网络4K电视传输测试1月13日,中央广播电视总台联合中国移动、华为公司在广东深圳成功开展了5G网络4K电视传输测试,将央视春晚深圳分会场4K超高清信号回传至中央广播电视总台北京机房,同时将总台4K超高清北京景观信号传送至位于深圳分会场的总台4K超高清转播车展现实时信号,从而为2019年春晚5G技术的应用做好技术验证和准备。这是我国首次进行的5G网络4K传输,体现中央广播电视总台坚定加快推进5G规模试验和应用示范。6.腾讯将在三亚设立区域总部据南海网报道,2019年1月13日上午,海南省政府与腾讯集团在三亚举行工作座谈,三亚市政府与腾讯集团签署战略合作协议。双方将在打造“数字三亚”、产业发展合作、产业空间建设、城市品牌宣传等方面开展合作。腾讯将在三亚设立区域总部,建立游戏产业活动基地。网友评论:面朝大海,春暖花开~7.瑞幸咖啡准备在香港进行首次公开募股Equalocean援引知情人士报道,投资银行已开始为瑞幸咖啡(Luckin Coffee)准备在香港联合交易所进行IPO的上市材料。瑞幸咖啡成立于2017年10月,于2018年1月开始试营业,其目标是在中国挑战星巴克。在2018年12月12日最新一轮B轮融资后,公司估值22亿美元。瑞幸咖啡由GIC新加坡主权财富基金和中国国际金融有限公司等两家主要投资者支持。瑞幸咖啡在中国已开设2073家门店,覆盖所有大多数核心商务区,并计划在2019年开设2500家门店,总数达到4500家。网友评论:开门店的速度堪比真核细胞的有丝分裂8.美电信运营商Verizon测试云媒体服务1月12日消息,据外媒报道,美国无线运营商Verizon目前正在对其类似Netflix的游戏流媒体服务Verizon Gaming进行测试。据该公司文件显示,Verizon Gaming已经在英伟达Shield机顶盒上运行,它最终将进入安卓(Android)智能手机。在这两种使用场景中,这款服务都可以使用与之匹配的Xbox One控制器播放服务。Verizon还没有公开宣传Verizon Gaming,甚至没有真正承认过它的存在。9.锤子危机后罗永浩首发声:我并没有消失1月11日,记录罗永浩等创业的纪录片《燃点》登陆全国院线。罗永浩在锤子陷入资金危机后首次发声:“我并没有消失,只是工作太忙了,没时间和锤友沟通。”罗永浩称,希望今年上半段用最短时间把给供应商合作伙伴带来的麻烦解决掉。网友评论:希望能一锤定音10.SpaceX公司将裁员10%SpaceX在给纽约时报的声明中表示,SpaceX将继续为客户提供服务,成功开发星际飞船和全球太空互联网,因此,SpaceX必须成为一家精简的公司,SpaceX将裁员10%。网友评论:止步于星辰大海。【更多内容,欢迎访问】http://forum.huaweicloud.com/forum.php?mod=forumdisplay&fid=569&filter=typeid&typeid=266(内容来源于互联网,如侵犯您的合法权益或有其他任何疑问,请联系:huaweicloud.bbs@huawei.com沟通处理。谢谢!)
  • [云早报] 微软正式公布云游戏服务,明年向公众开放测试(北京时间)10月9日,星期二
    云早报,(北京时间)10月9日,星期二【云头条】微软正式公布云游戏服务,明年向公众开放测试微软正式公布了Xbox的云游戏服务“Project xCloud”,这项服务将允许Xbox One游戏在电脑、手机以及平板上游玩。微软表示目前正在测试“Project xCloud”,并计划明年向公众开放测试。在一周前,谷歌也宣布了他们的云游戏服务“Project Stream”,并将在美国展开测试,玩家可以在Chrome浏览器上游玩《刺客信条:奥德赛》。【华为云新闻】华为云@HC2018抢鲜看|关于华为云的一切全在这!(查看全文)【互联网新闻】1.FF:恒大未及时履约,贾跃亭未操控其董事会北京时间10月8日下午,法拉第未来在其官方Twitter发表声明称,FF欲与恒大解约的唯一原因是恒大在协议有效期内未履行其支付款项的承诺,并阻止FF接受其他融资。在最初的8亿美元投资之后,恒大于今年7月同意提早支付最初洽谈的剩余款项,包括12亿美元中的5亿美元。与恒大集团对媒体及其股东的口径相反的是,在同意提早支付一事中,贾跃亭并没有“操纵”恒大董事会。恒大完全知晓法拉第未来为何需要这笔资金,以及何时需要这笔资金,这一切都是为了FF91能在2019年顺利生产和交付。受FF和恒大之争影响,乐视网今日收盘跌7.93%。比乐视网更惨的是,恒大健康今日收盘跌15.71%网友评论:孙宏斌:你们见过黑洞吗?我见过。2.范冰冰偷逃税案后续:有关责任单位和责任人被问责据新华社10月8日报道,记者从国家税务总局江苏省税务局获悉,依据《中国**问责条例》、《行政机关公务员处分条例》和《税收违法违纪行为处分规定》,国家税务总局责成江苏省税务局对在范冰冰偷逃税案件中,因管理不力、负有领导责任的相关单位和人员,依规依纪进行了问责国家税务总局同步开展了规范影视行业税收秩序工作。从2018年10月10日起,各地税务机关通知本地区影视制作公司、经纪公司、演艺公司、明星工作室等影视行业企业和高收入影视从业人员,对2016年以来的申报纳税情况进行自查自纠。主动补缴税款的,免予行政处罚,不予罚款;对个别拒不纠正的影视行业企业及从业人员开展重点检查,并依法严肃处理。网友评论:贾跃亭花了8亿,范冰冰偷税8亿,他们都在以亿代牢。3.百度公布员工父母医保计划细则:可不限年龄不限健康状况参与10月8日,百度官微发布消息称,百度“青松计划”的细则正式推出,父母信息在线登记同步开放。百度人力资源高级副总裁Lee在内部邮件中称,“青松计划”突破了很多限制,可以让百度员工的父母不限年龄、不限社保、不限健康状况全部参与,对自费类药品和治疗费也能高比例赔付,提供较高年保额、设置较低免赔额。网友评论:众里寻他千百度...4.飞猪回应王小山“杀熟”质疑:从来没有10月8日,针对专栏作家王小山微博关于飞猪机票杀熟的质疑,飞猪晚间发布微博回应称,“飞猪敢于承诺:从来没有,也永远不会利用大数据损害消费者利益。”王小山昨日发微博称用飞猪订机票遭遇了“杀熟”,“同一航班,别人卖2500,飞猪卖我3211。”王小山称自己订机票基本都用国内的APP,这几年飞猪用的最多,但经人提醒才发现自己买的利马到布宜诺斯艾利斯的机票,同一航班,别人卖2500,飞猪卖给自己是3211。网友评论:国庆买的票已经上交订单生成,七八次显示不成功,重新提交价格翻一倍!5.B站获腾讯3.176亿美元现金投资,股价一度涨近16%10月3日晚,B站和腾讯宣布,双方已达成协议,腾讯将对B站投资共3.176亿美元现金。根据该协议,腾讯将以每股12.67美元价格,认购B站新发行普通股。这笔交易预计将于近期完成。交易完成后,腾讯对B站持股比例将增至约12%。这是腾讯第二次出手B站,2015年腾讯产业共赢基金曾参投B站D轮亿元以上的融资。网友评论:腾讯:我要充一个股东大会员!6.电池革命:华为将推出超高速充电技术中国国家知识产权局最近公示了华为公司的一项锂电池发明专利,专利中描述了一种全新的锂离子二次电池负极活性材料,刚好是上面两种方案的结合。华为在电池材料中引入高能量密度的硅基材料体系,并通过杂原子掺杂硅基材料的创新技术,为充电过程中锂离子的迁移提供快捷通道,大幅电池快充能力。据业内专家分析,华为在锂离子电池中选用硅材料的意义在于其嵌锂容量远高于传统石墨负极。这意味着它能够锁住更多能量,从而提高锂离子电池的能量密度.网友评论:以后如果充电技术能像发信息一样速度就好,假如我没有电了,叫朋友发点电过来~7.腾讯音乐赴美提交IPO申请书腾讯音乐娱乐10月3日向美国证券交易委员会(SEC)提交了IPO招股书,准备在美国上市。腾讯音乐娱乐股票代码为“TME”,融资规模最高或达10亿美元。招股书介绍,腾讯音乐是中国最大的在线音乐娱乐集平台,有QQ音乐、酷狗音乐、酷我音乐和全民K歌产品。截至今年第二季度,月活用户超8亿人,日均使用时长70分钟,拥有超200家版权合作方。网友评论:我对腾讯音乐的唯一贡献就是买了火箭少女101的EP。8.微信数据报告:2100万人国庆期间日运动量不足100步 36氪讯,微**布的《2018年国庆长假微信数据报告》显示,从9月30日到10月6日,全国共有2100万微信用户选择假期宅,他们的微信运动步数不满百步,其中,56%的用户为80后和90后的年轻人。数据显示,宅人最多的广东省和江苏省,正是国庆期间外卖类支付最多的省份。网友评论:是什么让他们抵御旅行的诱惑?是真正的贫穷和和来自四面八方的婚礼邀请。9.微软暂停Windows 10更新并启动调查 10月8日,微软暂停发布Windows 10重大更新计划,原因是一些用户报告称,安装更新程序后大量个人文件被永久性删除。一位微软发言人对此回复称,“我们已经暂停了此次更新的推送,同时,我们将继续跟进某些用户报告的调查工作”。新的更新程序是在上周二推出的,当天微软在美国纽约举办了新款Surface电脑发布会。网友评论:你可能是正版windows的受害者。10.新iPhone问题丛生被指设计缺陷,万元买个“暖手宝”? 消费者对苹果新款手机普遍的反应是外形平庸、创新不足、升级不够。与此同时,苹果新款手机的价格普遍上调,其中双卡双待手机在国美、苏宁等店面的售价起步价就高达9200元,让众多消费者大呼吃不消。作为苹果家族最贵的系列产品,iPhone XS和iPhone XS Max自上市之日起,就引得“争议”不断。而苹果新款手机上市后,也广泛遭到用户吐槽和诟病,这直接导致新消费者购买的兴趣大打折扣。近几天,iPhone XS更是遭遇了“美颜门”和“充电门”,并被部分国内用户曝光了4G网络信号堪忧等问题。网友评论:少装应用多装X,续航还得靠关机!【本周新闻】微软开源机器学习框架 Infer.NET (北京时间)10月8日,星期一【更多内容,欢迎访问】http://forum.huaweicloud.com/forum.php?mod=forumdisplay&fid=569&filter=typeid&typeid=266(内容来源于互联网,如侵犯您的合法权益或有其他任何疑问,请联系:huaweicloud.bbs@huawei.com沟通处理。谢谢!)