免费试用

跨平台小程序在线开发工具,用做网页的技术做小程序,兼容微信、支付宝、抖音、快手、百度等主流小程序平台!

abm单创小程序开发

ABM(Agent-Based Model)单创,是一种利用代理人模型来进行数值模拟和分析的方法。与传统的宏观经济模型不同,ABM单创采用微观视角,通过对每个个体行为的建模,来模拟整个系统的演化和变化。ABM单创在社会、经济、生态、交通等领域得到了广泛的应用。本文将介绍如何利用小程序进行ABM单创开发。

1. 所需工具

- 微信小程序开发工具

- JavaScript编程语言基础知识

- ABM单创模型设计

2. 微信小程序开发

在微信小程序开发工具中,建立一个模板页面。在页面中添加按钮,将按钮事件绑定到对应的函数中。在函数中,调用ABM单创模型,并将模拟结果通过UI界面呈现。具体步骤如下:

1) 在wxml中添加按钮

```

```

2) 在js文件中声明我们的模型

```

// 定义一个公共类

class Person {

constructor(x, y) {

this.x = x;

this.y = y;

}

}

// 定义我们的模型

class Model {

constructor(n) {

this.n = n;

this.persons = [];

for (let i = 0; i < n; i++) {

let x = Math.floor(Math.random() * 100);

let y = Math.floor(Math.random() * 100);

this.persons[i] = new Person(x, y);

}

}

step() {

for (let i = 0; i < this.n; i++) {

let newX = Math.floor(Math.random() * 100);

let newY = Math.floor(Math.random() * 100);

this.persons[i].x = newX;

this.persons[i].y = newY;

}

}

}

// 导出我们的模型

module.exports = {

Model: Model

}

```

在上述代码中,我们定义了两个类,一个是Person类,它代表每一个代理人,我们用x和y坐标表示代理人在空间上的位置。另一个是Model类,我们在其中定义了n个代理人,用一个数组来表示。step方法用于模拟一个时间步长,对每个代理人进行移动。

3) 在js文件中定义simulate函数

```

const model = require('model.js');

Page({

// ...

simulate: function() {

let n = 100;

let model = new Model(n);

for (let i = 0; i < 100; i++) {

model.step();

}

console.log(model.persons);

// 展示模拟结果

}

})

```

在simulate函数中,我们通过调用Model类的构造函数和step方法,来模拟我们的ABM单创模型。通过console.log输出模拟的结果,进而在UI界面展现出来。

3. ABM单创模型建设

在上面的代码中,我们还没有定义真正的ABM单创模型。一个完整的ABM单创模型通常需要包括以下三个部分:代理人的行为模式(Behavioral rules)、状态变化(State transition)、空间关系(Spatial relationships)。

以一个简单的人群聚集为例来介绍如何建立这三个部分:

1) 行为模式:我们假设代理人具有寻找并靠近同类的行为。当代理人知道与他们距离较近的代理人的数量时,他们会寻求靠近这些代理人。我们将代理人们称为树立者。

```

class Model {

constructor(n) {

// 定义代理人个数

this.n = n;

// 定义代理人、随机分配位置

this.persons = [];

for (let i = 0; i < n; i++) {

let x = Math.floor(Math.random() * 100);

let y = Math.floor(Math.random() * 100);

this.persons[i] = new Person(i, x, y);

}

// 定义寻找距离

this.r = 20;

}

step() {

// 计算各个树立者之间的距离

let distances = [];

for (let i = 0; i < this.n; i++) {

distances[i] = [];

for (let j = 0; j < this.n; j++) {

let distance = Math.sqrt(Math.pow(this.persons[i].x - this.persons[j].x, 2) + Math.pow(this.persons[i].y - this.persons[j].y, 2));

distances[i][j] = distance;

}

}

// 寻找距离较近的树立者

for (let i = 0; i < this.n; i++) {

let count = 0;

for (let j = 0; j < this.n; j++) {

if (i !== j && distances[i][j] < this.r) {

count++;

}

}

if (count > 0) {

let xSum = 0;

let ySum = 0;

for (let j = 0; j < this.n; j++) {

if (i !== j && distances[i][j] < this.r) {

xSum += this.persons[j].x;

ySum += this.persons[j].y;

}

}

let xAvg = xSum / count;

let yAvg = ySum / count;

this.persons[i].x = xAvg;

this.persons[i].y = yAvg;

}

}

}

}

```

2) 状态变化:当人们追寻它们的同类时,它们不会立即停止并悬停不动。而是继续前进,直到再次与足够数量的其他人相遇。因此,我们给代理人定义一个速度,并在模型的状态变化部分中计算代理人应该移动的位置。

```

step() {

// 计算各个树立者之间的距离

let distances = [];

for (let i = 0; i < this.n; i++) {

distances[i] = [];

for (let j = 0; j < this.n; j++) {

let distance = Math.sqrt(Math.pow(this.persons[i].x - this.persons[j].x, 2) + Math.pow(this.persons[i].y - this.persons[j].y, 2));

distances[i][j] = distance;

}

}

// 寻找距离较近的树立者

for (let i = 0; i < this.n; i++) {

let count = 0;

for (let j = 0; j < this.n; j++) {

if (i !== j && distances[i][j] < this.r) {

count++;

}

}

if (count > 0) {

let xSum = 0;

let ySum = 0;

for (let j = 0; j < this.n; j++) {

if (i !== j && distances[i][j] < this.r) {

xSum += this.persons[j].x;

ySum += this.persons[j].y;

}

}

let xAvg = xSum / count;

let yAvg = ySum / count;

// 计算代理人的速度

let distanceToAvg = Math.sqrt(Math.pow(this.persons[i].x - xAvg, 2) + Math.pow(this.persons[i].y - yAvg, 2));

let speed = 1;

if (distanceToAvg > 10) {

speed = 0.5;

}

// 计算代理人的下一个位置

let xNext = this.persons[i].x + (xAvg - this.persons[i].x) * speed;

let yNext = this.persons[i].y + (yAvg - this.persons[i].y) * speed;

this.persons[i].x = xNext;

this.persons[i].y = yNext;

}

}

}

```

在代码中,我们首先计算每个人之间的距离。找到距离较近的树立者,计算拥挤度并移动到该位置。

3) 空间关系:在ABM单创模型中,代理人通常分布在空间上。在我们的人群聚集模型中,我们可以简单地将树立者分布在一个定长、定宽的平面上。在状态变化部分,代理人带着其位置向新位置移动(或没有移动)。

```

class Person {

constructor(id, x, y) {

this.id = id;

this.x = x;

this.y = y;

}

}

class Model {

constructor(n) {

// 定义代理人个数

this.n = n;

// 定义代理人、随机分配位置

this.persons = [];

for (let i = 0; i < n; i++) {

let x = Math.floor(Math.random() * 100);

let y = Math.floor(Math.random() * 100);

this.persons[i] = new Person(i, x, y);

}

// 定义寻找距离

this.r = 20;

}

step() {

// 计算各个树立者之间的距离

let distances = [];

for (let i = 0; i < this.n; i++) {

distances[i] = [];

for (let j = 0; j < this.n; j++) {

let distance = Math.sqrt(Math.pow(this.persons[i].x - this.persons[j].x, 2) + Math.pow(this.persons[i].y - this.persons[j].y, 2));

distances[i][j] = distance;

}

}

// 寻找距离较近的树立者

for (let i = 0; i < this.n; i++) {

let count = 0;

for (let j = 0; j < this.n; j++) {

if (i !== j && distances[i][j] < this.r) {

count++;

}

}

if (count > 0) {

let xSum = 0;

let ySum = 0;

for (let j = 0; j < this.n; j++) {

if (i !== j && distances[i][j] < this.r) {

xSum += this.persons[j].x;

ySum


相关知识:
阿里巴巴小程序免费开发是真的吗
阿里巴巴小程序免费开发是真的存在的,其原理主要基于阿里云函数计算和小程序开发框架,实现了小程序的云开发。下面将对其进行详细介绍。阿里巴巴小程序采用了类似于微信小程序的开发方式,即借助云开发快速搭建小程序,并利用云函数实现小程序的后台逻辑处理。相比较于自建服
2023-08-09
阿坝支付宝小程序开发周期
阿坝支付宝小程序开发周期是指从项目确定到上线发布的整个流程,包括需求分析、设计、开发、测试、验收和上线发布等多个环节。下面将逐一介绍每个环节的具体内容。1、需求分析在项目确定后,开发团队需要和客户深入沟通,了解客户对小程序的需求和功能要求,进而制定详细的需
2023-08-09
安阳开发小程序的公司有哪些企业
安阳是河南省的一个重要城市,是一个经济发达的地区。随着互联网技术的不断发展,小程序已经成为了企业宣传和销售的重要渠道之一。在安阳,也有很多开发小程序的企业。下面将为您介绍其中几家企业。1. 安阳优谷网络科技有限公司安阳优谷网络科技有限公司位于安阳市文峰区,
2023-08-09
安康小程序开发外包收费标准
随着互联网技术的不断升级和普及,小程序作为一种新的应用形态,被越来越多的企业所看好和采用。而对于一些小型企业或个人,由于缺乏开发技术和人力资源,选择外包小程序开发成为了较为普遍的选择。那么,安康小程序开发外包的收费标准是怎样的呢?一、小程序开发的定价方式小
2023-08-09
win10微信小程序开发工具打不开
在使用Win10进行微信小程序开发时,有时候会碰到微信小程序开发工具打不开的情况。这个问题可能是由于很多种原因引起的,接下来就为大家详细介绍一下可能引起微信小程序开发工具打不开的原因以及解决方法。1. 软件的版本问题如果使用的是老版本的微信小程序开发工具,
2023-08-09
wepy开发百度小程序指导手册
wepy是基于Vue.js框架开发的一套小程序组件化开发框架,并支持使用Promise等异步编程方式。它为小程序开发提供了更友好、更灵活的开发体验。wepy框架的特点包括:1. 支持类Vue.js语法,最大化迁移Web开发者的开发体验;2. 支持组件化开发
2023-08-09
qq小程序怎么开发呀
QQ小程序是一种小型应用程序,它可以在QQ聊天中使用。开发QQ小程序需要了解到它采用的开发框架是什么,以及开发过程中需要用到哪些工具和技术。一、QQ小程序开发框架QQ小程序采用的开发框架是Tent微信小程序开发框架,因为QQ和微信的开发框架是一致的,所以在
2023-08-09
code微信小程序开发插件
微信小程序是一种新型的应用程序,相比于传统的应用程序,微信小程序更为轻便,更加便于用户操作。微信小程序开发插件是一种可以加速开发并增强开发功能的工具,它可以协助开发者在开发微信小程序过程中更好的实现程序功能。微信小程序开发插件的原理微信小程序开发插件的运用
2023-08-09
gui的py文件打包exe
在这篇文章中,我们将详细介绍如何将使用图形用户界面(GUI)的Python文件打包成可执行文件(.exe)。在Windows平台上,可执行文件是运行程序的主要方式,将您的Python程序与GUI打包成可执行文件能让您的用户更轻松地使用您的程序,而无需安装P
2023-05-26
微信小程序开发工具版本怎么选择类型
微信小程序开发工具是一个基于微信开发者工具的软件,用于开发微信小程序的集成开发环境,能够编写、调试和发布小程序。为了满足不同开发者的需求,微信小程序开发工具提供了不同的版本类型,包括稳定版、体验版以及开发版。本文将介绍这三种版本类型的原理和详细介绍。一、稳
2023-05-26
微信小程序开发工具安装出问题
微信小程序是一款基于微信全新的应用形态, 它可以在微信内部无需下载安装即可直接使用,通过使用微信自带的开发工具,可快速开发和发布一款小程序。但是,有时安装微信小程序开发工具会遇到问题。该问题有许多种可能,下面介绍几种可能的情况和对应的解决方法。1.下载速度
2023-05-26
防伪小程序开发工具怎么用
防伪小程序是一种通过微信小程序开发的产品溯源系统,其主要功能在于为用户提供产品的唯一识别码,通常被称为防伪码。通过扫描防伪码,用户可以查看产品的来源、生产日期、质量等信息,从而保障产品的品质安全和消费者的权益。防伪小程序的开发过程涉及到多个环节,需要使用相
2023-05-22