【Gurobi学习笔记】翻转游戏(Flip Game):数学模型与Python调用Gurobi实现


前言

翻转游戏(Flip Game), 是20世纪90年代开始流行的一款电子游戏。该游戏由一个5*5的网格组成,每格里有一个圈。 游戏的初始状态是,25个圈中的颜色相同。点击任意一个圈将使得它和相邻格子的圈改变颜色。游戏的目标是用尽可能少的点击数让所有圈都变色。

举一个Flip Game的例子,来帮助理解游戏规则:
初始状态:
图1 初始状态
点击(3,3):
图2 第一次点击
点击(3,1):
图2 第二次点击
本文来介绍如何使用数学规划的方法来解决Flip Game。本文的主要内容如下:

  1. Flip Game的问题描述;
  2. Flip Game的数学规划模型;
  3. Python调用Gurobi求解Flip Game的模型。

问题描述

Flap Game的问题描述如下:

给定一个5*5的方格矩阵,其中格子中的圈两面颜色不同,比如要么绿色朝上,要么红色朝上,初始的圈颜色都相同。点击圈可以进行翻转,改变颜色,同时也会改变所有邻格的颜色。游戏的目的是:

  1. 使所有圈与初始颜色不同;
  2. 尽可能少的点击数。

数学模型

Flip Game可以被构建为整数规划,并使用求解器求解。本节就来介绍Flip Game的数学规划模型。

1.整理数据和参数

  • 5 ∗ 5 网格

图3 数据和参数

2.定义决策变量

  • 决策:点击哪一个格子
  • 变量: x i , j ( i , j = 1 , 2 , … , 5 ) x_{i, j}(i, j = 1,2,\ldots,5) xi,j(i,j=1,2,,5)
  • =1 如果 ( i , j ) (i,j) (i,j)被点,否则为0
  • 类型:0-1

3.构建目标函数

  • 最小化点击数
  • min ∑ i , j = 1 , … , 5 x i , j \sum_{i,j=1,\ldots,5}x_{i,j} i,j=1,,5xi,j

4.设置约束条件

  • 用逻辑约束来表达更简单
  • x i , j + x i − 1 , j + x i + 1 , j + x i , j − 1 + x i , j + 1 x_{i, j}+x_{i-1, j}+x_{i+1, j}+x_{i, j-1}+x_{i, j+1} xi,j+xi1,j+xi+1,j+xi,j1+xi,j+1为奇数, ∀ i , j = 1 , …
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值