Browse Source

Merge pull request #410 from eesast/dev

fix: 🐛 fix the storaged files
tags/0.1.0
Timothy Liu GitHub 2 years ago
parent
commit
1c7afd4d51
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 105 additions and 10 deletions
  1. +14
    -6
      .github/workflows/upload_COS.yml
  2. +87
    -0
      dependency/algorithm/README.md
  3. +4
    -4
      docs/GameRules.md

+ 14
- 6
.github/workflows/upload_COS.yml View File

@@ -138,19 +138,27 @@ jobs:
- name: Remove Files
run: |
rm ./THUAI6/hash.json
rm ./THUAI6/win/win64/PresentationCore.dll
rm ./THUAI6/win/win64/PresentationFramework.dll
rm ./THUAI6/win/win64/Debug/Microsoft.DiaSymReader.Native.amd64.dll
rm ./THUAI6/win/win64/WindowsBase.dll
rm ./THUAI6/win/win64/Debug/grpc_csharp_ext.x64.dll
rm ./THUAI6/win/win64/grpc_csharp_ext.x64.dll

rm -r ./THUAI6/win/CAPI/cpp/grpc
rm -r ./THUAI6/win/CAPI/cpp/spdlog
rm -r ./THUAI6/win/CAPI/cpp/tclap
rm -r ./THUAI6/linux/CAPI/cpp/grpc
rm -r ./THUAI6/linux/CAPI/cpp/spdlog
rm -r ./THUAI6/linux/CAPI/cpp/tclap
rm -r ./THUAI6/osx/CAPI/cpp/grpc
rm -r ./THUAI6/osx/CAPI/cpp/spdlog
rm -r ./THUAI6/osx/CAPI/cpp/tclap

rm ./THUAI6/linux/linux64/*.so
rm ./THUAI6/linux/linux64/Debug/*.so
rm ./THUAI6/linux/linux64/System.*.dll
rm ./THUAI6/linux/linux64/Debug/System.*.dll
rm ./THUAI6/osx/osx64/System.*.dll
rm ./THUAI6/osx/osx64/Debug/System.*.dll
rm ./THUAI6/win/win64/System.*.dll
rm ./THUAI6/win/win64/Debug/System.*.dll
- name: Upload COS
uses: zkqiang/tencent-cos-action@v0.1.0


+ 87
- 0
dependency/algorithm/README.md View File

@@ -118,6 +118,7 @@ mypair<int> cal(mypair<int> orgScore, mypair<int> competitionScore)

今年把得分上限这个东西去掉了。理论上今年可以得很高很高分,但是我估计大部分比赛得分在400-600左右,最高估计1000左右。算法 借 鉴 了THUAI4,算法,换了个激活函数(正态CDF),感觉分数变化相对更好了一些?
代码如下:

```cpp
#include <iostream>
#include <algorithm>
@@ -243,3 +244,89 @@ int main()
`1000 - score`(x
`ReLU(1000 - score)`(√
防止真的超过了 1000)

## THUAI6

因为今年的对局得分是两局得分之和,所以会出现一定程度的“数值膨胀”,在这里调低了胜者得分权值,同时提高了比赛分差距悬殊阈值和天梯分差距悬殊阈值。同时由于今年得分的上限不好确定,所以负者失分的基础值变为与胜者的得分之差。

```c++
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

template <typename T>
using mypair = pair<T, T>;

// orgScore 是天梯中两队的分数;competitionScore 是这次游戏两队的得分

mypair<int> cal(mypair<int> orgScore, mypair<int> competitionScore)
{

// 调整顺序,让第一个元素成为获胜者,便于计算

bool reverse = false; // 记录是否需要调整

if (competitionScore.first < competitionScore.second)
{
reverse = true;
}
else if (competitionScore.first == competitionScore.second)
{
if (orgScore.first == orgScore.second) // 完全平局,不改变天梯分数
{
return orgScore;
}

if (orgScore.first > orgScore.second) // 本次游戏平局,但一方天梯分数高,另一方天梯分数低,需要将两者向中间略微靠拢,因此天梯分数低的定为获胜者
{
reverse = true;
}
else
{
reverse = false;
}
}

if (reverse) // 如果需要换,换两者的顺序
{
swap(competitionScore.first, competitionScore.second);
swap(orgScore.first, orgScore.second);
}

// 转成浮点数
mypair<double> orgScoreLf;
mypair<double> competitionScoreLf;
orgScoreLf.first = orgScore.first;
orgScoreLf.second = orgScore.second;
competitionScoreLf.first = competitionScore.first;
competitionScoreLf.second = competitionScore.second;
mypair<int> resScore;

const double deltaWeight = 1000.0; // 差距悬殊判断参数,比赛分差超过此值就可以认定为非常悬殊了,天梯分数增量很小,防止大佬虐菜鸡的现象造成两极分化

double delta = (orgScoreLf.first - orgScoreLf.second) / deltaWeight;
cout << "Tanh delta: " << tanh(delta) << endl;
{

const double firstnerGet = 9e-6; // 胜利者天梯得分权值
const double secondrGet = 5e-6; // 失败者天梯得分权值

double deltaScore = 2100.0; // 两队竞争分差超过多少时就认为非常大
double correctRate = (orgScoreLf.first - orgScoreLf.second) / (deltaWeight * 1.2); // 订正的幅度,该值越小,则在势均力敌时天梯分数改变越大
double correct = 0.5 * (tanh((competitionScoreLf.first - competitionScoreLf.second - deltaScore) / deltaScore - correctRate) + 1.0); // 一场比赛中,在双方势均力敌时,减小天梯分数的改变量
cout << "correct: " << correct << endl;
resScore.first = orgScore.first + round(competitionScoreLf.first * competitionScoreLf.first * firstnerGet * (1 - tanh(delta)) * correct); // 胜者所加天梯分
resScore.second = orgScore.second - round((competitionScoreLf.first - competitionScoreLf.second) * (competitionScoreLf.first - competitionScoreLf.second) * secondrGet * (1 - tanh(delta)) * correct); // 败者所扣天梯分
}

// 如果换过,再换回来
if (reverse)
{
swap(resScore.first, resScore.second);
}

return resScore;
}
```


+ 4
- 4
docs/GameRules.md View File

@@ -1,5 +1,5 @@
# 规则
V5.2
V5.3
- [规则](#规则)
- [简则](#简则)
- [地图](#地图)
@@ -140,9 +140,9 @@ $$

### 信息相关
- Bgm (在structures.h/.py中的student类或Tricker类中作为其属性)
1. 不详的感觉(dangerAlert):如果捣蛋鬼进入(学生的警戒半径/捣蛋鬼的隐蔽度)的距离,则学生的dangerAlert=(int)(警戒半径/二者距离)
2. 期待搞事的感觉(trickDesire):如果有学生进入(捣蛋鬼的警戒半径/学生的隐蔽度)的距离,则捣蛋鬼trickDesire=(int)(警戒半径/可被发觉的最近的学生距离)
3. 学习的声音(classVolume): 警戒半径内有人学习时,捣蛋鬼classVolume=(int)((警戒半径x学习进度百分比)/二者距离)
1. 不详的感觉(dangerAlert):如果捣蛋鬼进入(学生的警戒半径/捣蛋鬼的隐蔽度)的距离,则学生的dangerAlert=(警戒半径/二者距离)
2. 期待搞事的感觉(trickDesire):如果有学生进入(捣蛋鬼的警戒半径/学生的隐蔽度)的距离,则捣蛋鬼trickDesire=(警戒半径/可被发觉的最近的学生距离)
3. 学习的声音(classVolume): 警戒半径内有人学习时,捣蛋鬼classVolume=((警戒半径x学习进度百分比)/二者距离)
- 可以向每一个队友发送不超过256字节的信息

### 可视范围


Loading…
Cancel
Save