This commit is contained in:
2025-09-04 14:09:30 +08:00
parent cb74579f90
commit a7379b6b6e

View File

@@ -0,0 +1,77 @@
package org.dromara.easyai.naturalLanguage.languageCreator;
import org.dromara.easyai.gameRobot.Action;
import java.util.ArrayList;
import java.util.List;
public class WordRight extends Action {
private List<String> keyWords;
private List<String> finishWords;//终结态词集合
public WordRight(List<String> keyWords, List<String> finishWords) {
this.keyWords = keyWords;
this.finishWords = finishWords;
}
@Override
public int getActionId() {
return super.getActionId();
}
@Override
public void setActionId(int actionId) {
super.setActionId(actionId);
}
@Override
public List<int[]> action(int[] stateId) {
int id = stateId[0];
String myWord = keyWords.get(id - 1);
int len = myWord.length() + 1;
int size = keyWords.size();
List<int[]> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
String word = keyWords.get(i);
if (word.length() == len && word.substring(0, len - 1).equals(myWord)) {
list.add(new int[]{i + 1});
}
}
return list;
}
private boolean isFinish(String myWord) {
boolean isHere = false;
for (String finishWord : finishWords) {
if (finishWord.hashCode() == myWord.hashCode() && finishWord.equals(myWord)) {
isHere = true;
break;
}
}
return isHere;
}
@Override
protected int getProfit(int[] stateId) {
int allProfit = 0;
List<int[]> states = action(stateId);
if (states.isEmpty()) {
allProfit = -10;
} else {
for (int i = 0; i < states.size(); i++) {
int nextID = states.get(i)[0];
if (nextID > 0) {
String myWord = keyWords.get(nextID - 1);//查看是否为终结态
if (isFinish(myWord)) {//是终结态
allProfit = allProfit + 10;
}
} else {
allProfit = allProfit - 10;
}
}
allProfit = allProfit / states.size();
}
return allProfit;
}
}