final presentation, restructure of the repository, updated code to have weighted probabilities and more

This commit is contained in:
Tom
2026-07-24 17:33:59 +02:00
parent c129ba7206
commit 1a4e53b30a
20 changed files with 3290 additions and 2969 deletions

View File

@@ -2,10 +2,10 @@ FROM python:3.14-slim
WORKDIR /app WORKDIR /app
COPY ./main.py /app COPY requirements.txt /app/
COPY ./simulator.py /app
COPY ./requirements.txt /app
RUN pip install -r requirements.txt RUN pip install --no-cache-dir -r requirements.txt
COPY main.py simulator.py /app/
CMD ["python", "main.py"] CMD ["python", "main.py"]

View File

@@ -30,18 +30,6 @@ def Continue(title="") -> None:
print() print()
# def MainMenu() -> None:
# global currentFunction
# options = ["Simulator", "Calculator", "Quit"]
# actions: list[Callable[[], None]] = [SimulatorMenu, StopApplication]
# selectedIndex = ShowMenu(
# options, title="Boolean Network Simulator\nby Tom Zuidberg"
# )
# currentFunction = actions[selectedIndex]
def StopApplication() -> None: def StopApplication() -> None:
quit() quit()
@@ -151,11 +139,14 @@ def BooleanNetworkMenu(
functionStrings: list = [None for _ in range(3)] functionStrings: list = [None for _ in range(3)]
functionsDirtyFlag = False functionsDirtyFlag = False
current_highlight = 0 current_highlight = 0
functions_highlight = 0
probFunctionStrings: list[list[str]] = [[] for _ in range(3)]
if bn is not None and funcStrings is not None and funcs is not None: if bn is not None and funcStrings is not None and funcs is not None:
boolNetwork = bn boolNetwork = bn
functions = funcs functions = funcs
functionStrings = funcStrings functionStrings = funcStrings
probFunctionStrings = [[] for _ in range(boolNetwork.size)]
def Menu() -> None: def Menu() -> None:
nonlocal current_highlight nonlocal current_highlight
@@ -164,10 +155,7 @@ def BooleanNetworkMenu(
f"Set size (current: {boolNetwork.size}) WARNING: this will reset all other options!", f"Set size (current: {boolNetwork.size}) WARNING: this will reset all other options!",
f"Set state (current: {str(boolNetwork)[-boolNetwork.size :]})", f"Set state (current: {str(boolNetwork)[-boolNetwork.size :]})",
f"Set update scheme (current: {boolNetwork.updateScheme})", f"Set update scheme (current: {boolNetwork.updateScheme})",
*[ "Edit update functions",
f"Set update function of node x{i} (current: {functionStrings[i - 1]})"
for i in range(1, boolNetwork.size + 1)
],
None, None,
"Update once (hold ENTER for continuous updates)", "Update once (hold ENTER for continuous updates)",
"Update multiple times", "Update multiple times",
@@ -182,7 +170,7 @@ def BooleanNetworkMenu(
SetSizeHelper, SetSizeHelper,
SetStateHelper, SetStateHelper,
SetUpdateSchemeHelper, SetUpdateSchemeHelper,
*[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)], FunctionsMenu,
None, None,
UpdateHelper, UpdateHelper,
MultiUpdateHelper, MultiUpdateHelper,
@@ -204,7 +192,7 @@ def BooleanNetworkMenu(
actions[selectedIndex]() actions[selectedIndex]()
def SetSizeHelper() -> None: def SetSizeHelper() -> None:
nonlocal boolNetwork, functions, functionStrings nonlocal boolNetwork, functions, functionStrings, probFunctionStrings
while True: while True:
size = input("Set new size (Leave empty to cancel):\n").strip() size = input("Set new size (Leave empty to cancel):\n").strip()
if size == "": if size == "":
@@ -219,6 +207,7 @@ def BooleanNetworkMenu(
boolNetwork = BooleanNetwork(size) boolNetwork = BooleanNetwork(size)
functions = [None for _ in range(size)] functions = [None for _ in range(size)]
functionStrings = [None for _ in range(size)] functionStrings = [None for _ in range(size)]
probFunctionStrings = [[] for _ in range(size)]
return return
def SetStateHelper() -> None: def SetStateHelper() -> None:
@@ -237,9 +226,32 @@ def BooleanNetworkMenu(
print("Invalid input:", e) print("Invalid input:", e)
def SetUpdateSchemeHelper() -> None: def SetUpdateSchemeHelper() -> None:
nonlocal boolNetwork nonlocal boolNetwork, functions, functionStrings, functionsDirtyFlag
def AdoptFromProbabilistic() -> None:
nonlocal functionsDirtyFlag
for i in range(boolNetwork.size):
if probFunctionStrings[i]:
funcString = probFunctionStrings[i][0]
func = eval(
"lambda "
+ ",".join(f"x{j}" for j in range(1, boolNetwork.size + 1))
+ ":"
+ funcString
)
functions[i] = func
functionStrings[i] = funcString
functionsDirtyFlag = True
def SwitchToSynchronous() -> None:
wasProbabilistic = boolNetwork.updateScheme == "probabilistic"
boolNetwork.UseSynchronousScheme()
if wasProbabilistic:
AdoptFromProbabilistic()
def SetSequentialHelper() -> None: def SetSequentialHelper() -> None:
wasProbabilistic = boolNetwork.updateScheme == "probabilistic"
while True: while True:
seq = input( seq = input(
"Set sequence. (Leave empty to cancel)\nFormat example: '1,4,3,2'\n" "Set sequence. (Leave empty to cancel)\nFormat example: '1,4,3,2'\n"
@@ -252,26 +264,24 @@ def BooleanNetworkMenu(
try: try:
seq = [int(i) for i in seq] seq = [int(i) for i in seq]
boolNetwork.UseSequentialScheme(seq) boolNetwork.UseSequentialScheme(seq)
if wasProbabilistic:
AdoptFromProbabilistic()
return return
except Exception as e: except Exception as e:
print("Invalid input:", e) print("Invalid input:", e)
def SetProbabilisticHelper() -> None: def SwitchToAsyncRandom() -> None:
while True: wasProbabilistic = boolNetwork.updateScheme == "probabilistic"
chance = input( boolNetwork.UseAsynchronousRandomScheme()
"Set flip chance as float between 0.0 and 1.0. (Leave empty to cancel)\n" if wasProbabilistic:
).strip() AdoptFromProbabilistic()
if chance == "":
print("Cancelled")
return
try: def SwitchToProbabilistic() -> None:
chance = float(chance) for i in range(boolNetwork.size):
boolNetwork.UseProbabilisticScheme(chance) if not probFunctionStrings[i] and functions[i] is not None:
return boolNetwork.AddProbabilisticFunction(i, functions[i], 1.0)
probFunctionStrings[i].append(functionStrings[i])
except Exception as e: boolNetwork.UseProbabilisticScheme()
print("Invalid input:", e)
title = "Select update scheme:" title = "Select update scheme:"
options = [ options = [
@@ -282,15 +292,120 @@ def BooleanNetworkMenu(
"Cancel", "Cancel",
] ]
actions = [ actions = [
lambda: boolNetwork.UseSynchronousScheme(), SwitchToSynchronous,
SetSequentialHelper, SetSequentialHelper,
SetProbabilisticHelper, SwitchToProbabilistic,
lambda: boolNetwork.UseAsynchronousRandomScheme(), SwitchToAsyncRandom,
lambda: None, lambda: None,
] ]
actions[ShowMenu(options=options, title=title)]() actions[ShowMenu(options=options, title=title)]()
def FunctionsMenu() -> None:
nonlocal functions_highlight
done: bool = False
def Menu() -> None:
nonlocal functions_highlight
title = "Edit update functions:"
deleteTargets: list = []
if boolNetwork.updateScheme in ("synchronous", "sequential", None):
options = [
*[
f"Set update function of node x{i} (current: {functionStrings[i - 1]})"
for i in range(1, boolNetwork.size + 1)
],
None,
"Return",
]
actions = [
*[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)],
None,
ReturnHelper,
]
elif boolNetwork.updateScheme == "asynchronous_random":
options = [
*[
f"Set update function of node x{i} (current: {functionStrings[i - 1]})"
for i in range(1, boolNetwork.size + 1)
],
None,
*[
f"Set selection weight of node x{i} (current: {boolNetwork.node_selection_weights[i - 1]})"
for i in range(1, boolNetwork.size + 1)
],
None,
"Return",
]
actions = [
*[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)],
None,
*[partial(SetNodeWeightHelper, i) for i in range(boolNetwork.size)],
None,
ReturnHelper,
]
else: # probabilistic
title = "Edit update functions:\n(highlight a function entry and press 'd' to delete it)"
options = []
actions = []
for i in range(boolNetwork.size):
for j in range(len(probFunctionStrings[i])):
options.append(
f"Set update function #{j + 1} of node x{i + 1} (current: {probFunctionStrings[i][j]})"
)
actions.append(partial(EditProbFunctionHelper, i, j))
deleteTargets.append((i, j))
options.append(
f"Set weight of function #{j + 1} of node x{i + 1} (current: {boolNetwork.probabilistic_weights[i][j]})"
)
actions.append(partial(EditProbWeightHelper, i, j))
deleteTargets.append(None)
options.append(f"Add new function for node x{i + 1}")
actions.append(partial(AddProbFunctionHelper, i))
deleteTargets.append(None)
options.append(None)
actions.append(None)
deleteTargets.append(None)
options.append("Return")
actions.append(ReturnHelper)
deleteTargets.append(None)
if boolNetwork.updateScheme == "probabilistic":
menu = TerminalMenu(
menu_entries=options,
title=title,
multi_select=False,
cursor_index=functions_highlight,
accept_keys=("enter", "d"),
)
selectedIndex = menu.show()
if selectedIndex is None:
selectedIndex = len(options) - 1
acceptKey = "enter"
else:
acceptKey = menu.chosen_accept_key
functions_highlight = selectedIndex
if acceptKey == "d" and deleteTargets[selectedIndex] is not None:
DeleteProbFunctionHelper(*deleteTargets[selectedIndex])
else:
actions[selectedIndex]()
return
selectedIndex = ShowMenu(
options=options, title=title, highlight_entry=functions_highlight
)
functions_highlight = selectedIndex
actions[selectedIndex]()
def ReturnHelper() -> None:
nonlocal done
done = True
while not done:
Menu()
def UpdateHelper() -> None: def UpdateHelper() -> None:
nonlocal functions, boolNetwork, functionsDirtyFlag nonlocal functions, boolNetwork, functionsDirtyFlag
if functionsDirtyFlag: if functionsDirtyFlag:
@@ -377,6 +492,115 @@ def BooleanNetworkMenu(
except Exception as e: except Exception as e:
print("Error while parsing function:", e) print("Error while parsing function:", e)
def SetNodeWeightHelper(index: int) -> None:
nonlocal boolNetwork
while True:
weight = input(
f"Set new selection weight for node x{index + 1}. Must be a positive number. (Leave empty to cancel)\n"
).strip()
if weight == "":
print("Cancelled")
return
try:
weight = float(weight)
boolNetwork.SetNodeSelectionWeight(index, weight)
return
except Exception as e:
print("Invalid input:", e)
def AddProbFunctionHelper(index: int) -> None:
nonlocal boolNetwork, probFunctionStrings
while True:
funcString = input(
f"Set new function for node x{index + 1}. The function will receive all nodes in form of x1, x2, ..., x[size]. (Leave empty to cancel)\n"
)
if funcString == "":
print("Cancelled")
return
try:
func = (
"lambda "
+ ",".join(f"x{i}" for i in range(1, boolNetwork.size + 1))
+ ":"
+ funcString
)
func = eval(func)
if not isinstance(func, FunctionType):
print("Please enter a valid function. Got: " + func)
continue
except Exception as e:
print("Error while parsing function:", e)
continue
weight = 1.0
weightInput = input(
"Set weight for this function. Must be a positive number. (Leave empty for default 1.0)\n"
).strip()
if weightInput != "":
try:
weight = float(weightInput)
except ValueError:
print("Invalid weight, using default 1.0")
weight = 1.0
try:
boolNetwork.AddProbabilisticFunction(index, func, weight)
probFunctionStrings[index].append(funcString)
return
except Exception as e:
print("Error while adding function:", e)
def EditProbFunctionHelper(index: int, function_index: int) -> None:
nonlocal boolNetwork, probFunctionStrings
while True:
funcString = input(
f"Set new function for node x{index + 1}, function #{function_index + 1}. (Leave empty to cancel)\n"
)
if funcString == "":
print("Cancelled")
return
try:
func = (
"lambda "
+ ",".join(f"x{i}" for i in range(1, boolNetwork.size + 1))
+ ":"
+ funcString
)
func = eval(func)
if not isinstance(func, FunctionType):
print("Please enter a valid function. Got: " + func)
continue
boolNetwork.SetProbabilisticFunction(index, function_index, func)
probFunctionStrings[index][function_index] = funcString
return
except Exception as e:
print("Error while parsing function:", e)
def EditProbWeightHelper(index: int, function_index: int) -> None:
nonlocal boolNetwork
while True:
weight = input(
f"Set new weight for node x{index + 1}, function #{function_index + 1}. Must be a positive number. (Leave empty to cancel)\n"
).strip()
if weight == "":
print("Cancelled")
return
try:
weight = float(weight)
boolNetwork.SetProbabilisticFunctionWeight(index, function_index, weight)
return
except Exception as e:
print("Invalid input:", e)
def DeleteProbFunctionHelper(index: int, function_index: int) -> None:
nonlocal boolNetwork, probFunctionStrings
try:
boolNetwork.RemoveProbabilisticFunction(index, function_index)
del probFunctionStrings[index][function_index]
except Exception as e:
print("Error while deleting function:", e)
Continue()
def ToggleWriteToFileHelper(): def ToggleWriteToFileHelper():
nonlocal writeToFile nonlocal writeToFile
writeToFile = not writeToFile writeToFile = not writeToFile

View File

@@ -7,6 +7,19 @@ import numpy as np
import scipy.linalg import scipy.linalg
def _wrap_bool_function(
function: Callable[Concatenate[bool, ...], bool],
) -> Callable[Concatenate[bool, ...], bool]:
def wrap(*args, **kwargs) -> bool:
result = function(*args, **kwargs)
assert type(result) is bool, (
f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}"
)
return result
return wrap
class BooleanNetwork: class BooleanNetwork:
def __init__(self, size: int) -> None: def __init__(self, size: int) -> None:
assert type(size) is int and size > 0, ( assert type(size) is int and size > 0, (
@@ -17,8 +30,7 @@ class BooleanNetwork:
self.__has_update_functions = False self.__has_update_functions = False
self.__has_update_scheme = False self.__has_update_scheme = False
self.__has_sequence = False self.__has_sequence = False
self.__has_flip_chance = False self.__has_probabilistic_functions = False
self.flip_chance: float = 0
self.sequence: list[int] = list() self.sequence: list[int] = list()
self.seed: int | None = None self.seed: int | None = None
self.time_step = 0 self.time_step = 0
@@ -29,21 +41,23 @@ class BooleanNetwork:
lambda x: x for _ in range(size) lambda x: x for _ in range(size)
] ]
# asynchronous_random: relative likelihood that node i is the one picked
# to update on a given time step. Doesn't need to sum to 1 - it is
# normalised (weight_i / sum(weights)) whenever it is used.
self.node_selection_weights: list[float] = [1.0 for _ in range(size)]
# probabilistic: each node may have any number of candidate update
# functions. On every update, one candidate per node is drawn
# according to its weight (again normalised at use-time, not
# required to sum to 1) and applied synchronously.
self.probabilistic_functions: list[
list[Callable[Concatenate[bool, ...], bool]]
] = [list() for _ in range(size)]
self.probabilistic_weights: list[list[float]] = [list() for _ in range(size)]
def SetFunctions( def SetFunctions(
self, functions: Iterable[Callable[Concatenate[bool, ...], bool]] self, functions: Iterable[Callable[Concatenate[bool, ...], bool]]
) -> Self: ) -> Self:
def wrapper(
function: Callable[Concatenate[bool, ...], bool],
) -> Callable[Concatenate[bool, ...], bool]:
def wrap(*args, **kwargs) -> bool:
result = function(*args, **kwargs)
assert type(result) is bool, (
f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}"
)
return result
return wrap
funcs: list[Callable[Concatenate[bool, ...], bool]] = list(functions) funcs: list[Callable[Concatenate[bool, ...], bool]] = list(functions)
assert len(funcs) == self.size, ( assert len(funcs) == self.size, (
@@ -56,7 +70,7 @@ class BooleanNetwork:
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(func).parameters)} arguments, expected {self.size}" f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(func).parameters)} arguments, expected {self.size}"
) )
self.functions[i] = wrapper(func) self.functions[i] = _wrap_bool_function(func)
self.__has_update_functions = True self.__has_update_functions = True
return self return self
@@ -64,22 +78,101 @@ class BooleanNetwork:
def SetFunction( def SetFunction(
self, index: int, function: Callable[Concatenate[bool, ...], bool] self, index: int, function: Callable[Concatenate[bool, ...], bool]
) -> Self: ) -> Self:
def wrapper(
function: Callable[Concatenate[bool, ...], bool],
) -> Callable[Concatenate[bool, ...], bool]:
def wrap(*args, **kwargs) -> bool:
result = function(*args, **kwargs)
assert type(result) is bool, (
f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}"
)
return result
return wrap
assert 0 <= index < self.size, ( assert 0 <= index < self.size, (
f"Function error: cannot set function at index {index} - out of bound." f"Function error: cannot set function at index {index} - out of bound."
) )
self.functions[index] = wrapper(function) assert len(inspect.signature(function).parameters) == self.size, (
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}"
)
self.functions[index] = _wrap_bool_function(function)
return self
def SetNodeSelectionWeight(self, index: int, weight: float) -> Self:
assert 0 <= index < self.size, (
f"Weight error: cannot set selection weight at index {index} - out of bound."
)
assert type(weight) is float and weight > 0, (
f"Weight error: weight must be a positive float. got {weight=}"
)
self.node_selection_weights[index] = weight
return self
def AddProbabilisticFunction(
self,
index: int,
function: Callable[Concatenate[bool, ...], bool],
weight: float = 1.0,
) -> Self:
assert 0 <= index < self.size, (
f"Function error: cannot add function at index {index} - out of bound."
)
assert len(inspect.signature(function).parameters) == self.size, (
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}"
)
assert type(weight) is float and weight > 0, (
f"Weight error: weight must be a positive float. got {weight=}"
)
self.probabilistic_functions[index].append(_wrap_bool_function(function))
self.probabilistic_weights[index].append(weight)
self.__has_probabilistic_functions = all(
len(functions) > 0 for functions in self.probabilistic_functions
)
return self
def SetProbabilisticFunction(
self,
index: int,
function_index: int,
function: Callable[Concatenate[bool, ...], bool],
) -> Self:
assert 0 <= index < self.size, (
f"Function error: cannot set function at index {index} - out of bound."
)
assert 0 <= function_index < len(self.probabilistic_functions[index]), (
f"Function error: node {index} has no function at position {function_index}."
)
assert len(inspect.signature(function).parameters) == self.size, (
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}"
)
self.probabilistic_functions[index][function_index] = _wrap_bool_function(
function
)
return self
def SetProbabilisticFunctionWeight(
self, index: int, function_index: int, weight: float
) -> Self:
assert 0 <= index < self.size, (
f"Weight error: cannot set weight at index {index} - out of bound."
)
assert 0 <= function_index < len(self.probabilistic_weights[index]), (
f"Weight error: node {index} has no function at position {function_index}."
)
assert type(weight) is float and weight > 0, (
f"Weight error: weight must be a positive float. got {weight=}"
)
self.probabilistic_weights[index][function_index] = weight
return self
def RemoveProbabilisticFunction(self, index: int, function_index: int) -> Self:
assert 0 <= index < self.size, (
f"Function error: cannot remove function at index {index} - out of bound."
)
assert 0 <= function_index < len(self.probabilistic_functions[index]), (
f"Function error: node {index} has no function at position {function_index}."
)
assert len(self.probabilistic_functions[index]) > 1, (
f"Function error: node {index} must keep at least one probabilistic function."
)
del self.probabilistic_functions[index][function_index]
del self.probabilistic_weights[index][function_index]
self.__has_probabilistic_functions = all(
len(functions) > 0 for functions in self.probabilistic_functions
)
return self return self
def UseSynchronousScheme(self) -> Self: def UseSynchronousScheme(self) -> Self:
@@ -127,16 +220,9 @@ class BooleanNetwork:
self.__has_update_scheme = True self.__has_update_scheme = True
return self return self
def UseProbabilisticScheme(self, flip_chance: float) -> Self: def UseProbabilisticScheme(self) -> Self:
if flip_chance is not None:
assert type(flip_chance) is float, (
f"Probabilistic error: given flip_chance is not a float: got {flip_chance}"
)
self.flip_chance = flip_chance
self.updateScheme = "probabilistic" self.updateScheme = "probabilistic"
self.__has_update_scheme = True self.__has_update_scheme = True
self.__has_flip_chance = True
return self return self
def __synchronous_update(self) -> None: def __synchronous_update(self) -> None:
@@ -150,15 +236,21 @@ class BooleanNetwork:
self.nodes[i] = self.functions[i](*self.nodes) self.nodes[i] = self.functions[i](*self.nodes)
def __asynchronous_random_update(self) -> None: def __asynchronous_random_update(self) -> None:
index = random.randrange(0, self.size) index = random.choices(
range(self.size), weights=self.node_selection_weights, k=1
)[0]
self.nodes[index] = self.functions[index](*self.nodes) self.nodes[index] = self.functions[index](*self.nodes)
def __probabilistic_update(self) -> None: def __probabilistic_update(self) -> None:
self.__synchronous_update() temp = list()
for i in range(self.size): for i in range(self.size):
rng = random.random() chosen = random.choices(
if rng <= self.flip_chance: self.probabilistic_functions[i],
self.nodes[i] = not self.nodes[i] weights=self.probabilistic_weights[i],
k=1,
)[0]
temp.append(chosen(*self.nodes))
self.nodes = temp
def SetState(self, state: str | list[bool] | tuple[bool, ...]) -> Self: def SetState(self, state: str | list[bool] | tuple[bool, ...]) -> Self:
assert isinstance(state, (str, list, tuple)), ( assert isinstance(state, (str, list, tuple)), (
@@ -192,7 +284,9 @@ class BooleanNetwork:
assert type(n) is int and n >= 0, ( assert type(n) is int and n >= 0, (
f"Update error: amount of updates must be an integer and positive. got {n=}" f"Update error: amount of updates must be an integer and positive. got {n=}"
) )
assert self.__has_update_functions, "Update error: no update functions defined" assert self.updateScheme == "probabilistic" or self.__has_update_functions, (
"Update error: no update functions defined"
)
assert self.__has_update_scheme, "Update error: no update scheme defined" assert self.__has_update_scheme, "Update error: no update scheme defined"
assert type(verbose) is bool, "Update error: verbose must be a bool" assert type(verbose) is bool, "Update error: verbose must be a bool"
assert type(writeToFile) is bool, "Update error: writeToFile must be a bool" assert type(writeToFile) is bool, "Update error: writeToFile must be a bool"
@@ -208,7 +302,9 @@ class BooleanNetwork:
case "asynchronous_random": case "asynchronous_random":
selected_update = self.__asynchronous_random_update selected_update = self.__asynchronous_random_update
case "probabilistic": case "probabilistic":
assert self.__has_flip_chance, "Update error: no flip_chance defined" assert self.__has_probabilistic_functions, (
"Update error: no probabilistic functions defined for every node"
)
selected_update = self.__probabilistic_update selected_update = self.__probabilistic_update
case _: case _:
raise Exception("Update error: update scheme selection went wrong") raise Exception("Update error: update scheme selection went wrong")
@@ -261,36 +357,37 @@ class BooleanNetwork:
matrix: np.ndarray = np.zeros((dimension, dimension)) matrix: np.ndarray = np.zeros((dimension, dimension))
if self.updateScheme == "probabilistic": if self.updateScheme == "probabilistic":
flipChance = self.flip_chance
self.UseSynchronousScheme()
for i, state in enumerate(product((False, True), repeat=self.size)): for i, state in enumerate(product((False, True), repeat=self.size)):
self.SetState(state) choice_ranges = [
self.Update() range(len(self.probabilistic_functions[n]))
for flips in product((False, True), repeat=self.size): for n in range(self.size)
flipped = int( ]
"".join( for combo in product(*choice_ranges):
str(
int(
self.nodes[j] if not flips[j] else not self.nodes[j]
)
)
for j in range(self.size)
),
2,
)
prob = np.float64(1) prob = np.float64(1)
for flip in flips: result: list[bool] = []
prob *= flipChance if flip else 1 - flipChance for n in range(self.size):
matrix[i][flipped] = prob weights = self.probabilistic_weights[n]
self.UseProbabilisticScheme(flipChance) total_weight = sum(weights)
chosen_index = combo[n]
prob *= weights[chosen_index] / total_weight
result.append(
self.probabilistic_functions[n][chosen_index](*state)
)
result_index = int(
"".join(str(int(b)) for b in result), 2
)
matrix[i][result_index] += prob
return matrix return matrix
if self.updateScheme == "asynchronous_random": if self.updateScheme == "asynchronous_random":
total_weight = sum(self.node_selection_weights)
for i, state in enumerate(product((False, True), repeat=self.size)): for i, state in enumerate(product((False, True), repeat=self.size)):
for j in range(self.size): for j in range(self.size):
self.SetState(state) self.SetState(state)
self.nodes[j] = self.functions[j](*self.nodes) self.nodes[j] = self.functions[j](*self.nodes)
matrix[i][int(self.state, 2)] += np.float64(1) / self.size matrix[i][int(self.state, 2)] += (
np.float64(self.node_selection_weights[j]) / total_weight
)
return matrix return matrix
for i, state in enumerate(product((False, True), repeat=self.size)): for i, state in enumerate(product((False, True), repeat=self.size)):

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 227 KiB

View File

@@ -1,447 +1,447 @@
IEEEabrv.bib IEEEabrv.bib
V1.12 (2007/01/11) V1.12 (2007/01/11)
Copyright (c) 2002-2007 by Michael Shell Copyright (c) 2002-2007 by Michael Shell
See: http://www.michaelshell.org/ See: http://www.michaelshell.org/
for current contact information. for current contact information.
BibTeX bibliography string definitions of the ABBREVIATED titles of BibTeX bibliography string definitions of the ABBREVIATED titles of
IEEE journals and magazines and online publications. IEEE journals and magazines and online publications.
This file is designed for bibliography styles that require This file is designed for bibliography styles that require
abbreviated titles and is not for use in bibliographies that abbreviated titles and is not for use in bibliographies that
require full-length titles. require full-length titles.
Support sites: Support sites:
http://www.michaelshell.org/tex/ieeetran/ http://www.michaelshell.org/tex/ieeetran/
http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/ http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/
and/or and/or
http://www.ieee.org/ http://www.ieee.org/
Special thanks to Laura Hyslop and ken Rawson of IEEE for their help Special thanks to Laura Hyslop and ken Rawson of IEEE for their help
in obtaining the information needed to compile this file. Also, in obtaining the information needed to compile this file. Also,
Volker Kuhlmann and Moritz Borgmann kindly provided some corrections Volker Kuhlmann and Moritz Borgmann kindly provided some corrections
and additions. and additions.
************************************************************************* *************************************************************************
Legal Notice: Legal Notice:
This code is offered as-is without any warranty either expressed or This code is offered as-is without any warranty either expressed or
implied; without even the implied warranty of MERCHANTABILITY or implied; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE! FITNESS FOR A PARTICULAR PURPOSE!
User assumes all risk. User assumes all risk.
In no event shall IEEE or any contributor to this code be liable for In no event shall IEEE or any contributor to this code be liable for
any damages or losses, including, but not limited to, incidental, any damages or losses, including, but not limited to, incidental,
consequential, or any other damages, resulting from the use or misuse consequential, or any other damages, resulting from the use or misuse
of any information contained here. of any information contained here.
All comments are the opinions of their respective authors and are not All comments are the opinions of their respective authors and are not
necessarily endorsed by the IEEE. necessarily endorsed by the IEEE.
This work is distributed under the LaTeX Project Public License (LPPL) This work is distributed under the LaTeX Project Public License (LPPL)
( http://www.latex-project.org/ ) version 1.3, and may be freely used, ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
distributed and modified. A copy of the LPPL, version 1.3, is included distributed and modified. A copy of the LPPL, version 1.3, is included
in the base LaTeX documentation of all distributions of LaTeX released in the base LaTeX documentation of all distributions of LaTeX released
2003/12/01 or later. 2003/12/01 or later.
Retain all contribution notices and credits. Retain all contribution notices and credits.
** Modified files should be clearly indicated as such, including ** ** Modified files should be clearly indicated as such, including **
** renaming them and changing author support contact information. ** ** renaming them and changing author support contact information. **
File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib, File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib,
IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst, IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst,
IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf
************************************************************************* *************************************************************************
USAGE: USAGE:
\bibliographystyle{mybstfile} \bibliographystyle{mybstfile}
\bibliography{IEEEabrv,mybibfile} \bibliography{IEEEabrv,mybibfile}
where the IEEE titles in the .bib database entries use the strings where the IEEE titles in the .bib database entries use the strings
defined here. e.g., defined here. e.g.,
journal = IEEE_J_AC, journal = IEEE_J_AC,
to yield "{IEEE} Trans. Automat. Contr." to yield "{IEEE} Trans. Automat. Contr."
IEEE uses abbreviated journal titles in their bibliographies - IEEE uses abbreviated journal titles in their bibliographies -
this file is suitable for work that is to be submitted to the IEEE. this file is suitable for work that is to be submitted to the IEEE.
For work that requires full-length titles, you should use the full For work that requires full-length titles, you should use the full
titles provided in the companion file, IEEEfull.bib. titles provided in the companion file, IEEEfull.bib.
** NOTES ** ** NOTES **
1. Journals have been grouped according to subject in order to make it 1. Journals have been grouped according to subject in order to make it
easier to locate and extract the definitions for related journals - easier to locate and extract the definitions for related journals -
as most works use references that are confined to a single topic. as most works use references that are confined to a single topic.
Magazines are listed in straight alphabetical order. Magazines are listed in straight alphabetical order.
2. String names are closely based on IEEE's own internal acronyms. 2. String names are closely based on IEEE's own internal acronyms.
3. Abbreviations follow IEEE's style. 3. Abbreviations follow IEEE's style.
4. Older, out-of-print IEEE titles are included (but not including titles 4. Older, out-of-print IEEE titles are included (but not including titles
dating prior to IEEE's formation from the IRE and AIEE in 1963). dating prior to IEEE's formation from the IRE and AIEE in 1963).
5. The following NEW/current journal definitions have been disabled because 5. The following NEW/current journal definitions have been disabled because
their abbreviations have not yet been verified: their abbreviations have not yet been verified:
STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"} STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"}
STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."} STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."}
STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."} STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."}
STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"} STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"}
6. The following OLD journal definitions have been disabled because 6. The following OLD journal definitions have been disabled because
their abbreviations have not yet been found/verified: their abbreviations have not yet been found/verified:
STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"} STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"}
STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"} STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"}
If you know what the proper abbreviation is for a string in #5 or #6 above, If you know what the proper abbreviation is for a string in #5 or #6 above,
email me and I will correct them in the next release. email me and I will correct them in the next release.
IEEE Journals IEEE Journals
aerospace and military aerospace and military
@STRING{IEEE_J_AES = "{IEEE} Trans. Aerosp. Electron. Syst."} @STRING{IEEE_J_AES = "{IEEE} Trans. Aerosp. Electron. Syst."}
@STRING{IEEE_J_ANE = "{IEEE} Trans. Aerosp. Navig. Electron."} @STRING{IEEE_J_ANE = "{IEEE} Trans. Aerosp. Navig. Electron."}
@STRING{IEEE_J_ANNE = "{IEEE} Trans. Aeronaut. Navig. Electron."} @STRING{IEEE_J_ANNE = "{IEEE} Trans. Aeronaut. Navig. Electron."}
@STRING{IEEE_J_AS = "{IEEE} Trans. Aerosp."} @STRING{IEEE_J_AS = "{IEEE} Trans. Aerosp."}
@STRING{IEEE_J_AIRE = "{IEEE} Trans. Airborne Electron."} @STRING{IEEE_J_AIRE = "{IEEE} Trans. Airborne Electron."}
@STRING{IEEE_J_MIL = "{IEEE} Trans. Mil. Electron."} @STRING{IEEE_J_MIL = "{IEEE} Trans. Mil. Electron."}
autos, transportation and vehicles (non-aerospace) autos, transportation and vehicles (non-aerospace)
@STRING{IEEE_J_ITS = "{IEEE} Trans. Intell. Transp. Syst."} @STRING{IEEE_J_ITS = "{IEEE} Trans. Intell. Transp. Syst."}
@STRING{IEEE_J_VT = "{IEEE} Trans. Veh. Technol."} @STRING{IEEE_J_VT = "{IEEE} Trans. Veh. Technol."}
@STRING{IEEE_J_VC = "{IEEE} Trans. Veh. Commun."} @STRING{IEEE_J_VC = "{IEEE} Trans. Veh. Commun."}
circuits, signals, systems, audio and controls circuits, signals, systems, audio and controls
@STRING{IEEE_J_SPL = "{IEEE} Signal Process. Lett."} @STRING{IEEE_J_SPL = "{IEEE} Signal Process. Lett."}
@STRING{IEEE_J_ASSP = "{IEEE} Trans. Acoust., Speech, Signal Process."} @STRING{IEEE_J_ASSP = "{IEEE} Trans. Acoust., Speech, Signal Process."}
@STRING{IEEE_J_AU = "{IEEE} Trans. Audio"} @STRING{IEEE_J_AU = "{IEEE} Trans. Audio"}
@STRING{IEEE_J_AUEA = "{IEEE} Trans. Audio Electroacoust."} @STRING{IEEE_J_AUEA = "{IEEE} Trans. Audio Electroacoust."}
@STRING{IEEE_J_AC = "{IEEE} Trans. Autom. Control"} @STRING{IEEE_J_AC = "{IEEE} Trans. Autom. Control"}
@STRING{IEEE_J_CAS = "{IEEE} Trans. Circuits Syst."} @STRING{IEEE_J_CAS = "{IEEE} Trans. Circuits Syst."}
@STRING{IEEE_J_CASVT = "{IEEE} Trans. Circuits Syst. Video Technol."} @STRING{IEEE_J_CASVT = "{IEEE} Trans. Circuits Syst. Video Technol."}
@STRING{IEEE_J_CASI = "{IEEE} Trans. Circuits Syst. {I}"} @STRING{IEEE_J_CASI = "{IEEE} Trans. Circuits Syst. {I}"}
@STRING{IEEE_J_CASII = "{IEEE} Trans. Circuits Syst. {II}"} @STRING{IEEE_J_CASII = "{IEEE} Trans. Circuits Syst. {II}"}
in 2004 CASI and CASII renamed part title to CASI_RP and CASII_EB, respectively. in 2004 CASI and CASII renamed part title to CASI_RP and CASII_EB, respectively.
@STRING{IEEE_J_CASI_RP = "{IEEE} Trans. Circuits Syst. {I}"} @STRING{IEEE_J_CASI_RP = "{IEEE} Trans. Circuits Syst. {I}"}
@STRING{IEEE_J_CASII_EB = "{IEEE} Trans. Circuits Syst. {II}"} @STRING{IEEE_J_CASII_EB = "{IEEE} Trans. Circuits Syst. {II}"}
@STRING{IEEE_J_CT = "{IEEE} Trans. Circuit Theory"} @STRING{IEEE_J_CT = "{IEEE} Trans. Circuit Theory"}
@STRING{IEEE_J_CST = "{IEEE} Trans. Control Syst. Technol."} @STRING{IEEE_J_CST = "{IEEE} Trans. Control Syst. Technol."}
@STRING{IEEE_J_SP = "{IEEE} Trans. Signal Process."} @STRING{IEEE_J_SP = "{IEEE} Trans. Signal Process."}
@STRING{IEEE_J_SU = "{IEEE} Trans. Sonics Ultrason."} @STRING{IEEE_J_SU = "{IEEE} Trans. Sonics Ultrason."}
@STRING{IEEE_J_SAP = "{IEEE} Trans. Speech Audio Process."} @STRING{IEEE_J_SAP = "{IEEE} Trans. Speech Audio Process."}
@STRING{IEEE_J_UE = "{IEEE} Trans. Ultrason. Eng."} @STRING{IEEE_J_UE = "{IEEE} Trans. Ultrason. Eng."}
@STRING{IEEE_J_UFFC = "{IEEE} Trans. Ultrason., Ferroelectr., Freq. Control"} @STRING{IEEE_J_UFFC = "{IEEE} Trans. Ultrason., Ferroelectr., Freq. Control"}
communications communications
@STRING{IEEE_J_COML = "{IEEE} Commun. Lett."} @STRING{IEEE_J_COML = "{IEEE} Commun. Lett."}
@STRING{IEEE_J_JSAC = "{IEEE} J. Sel. Areas Commun."} @STRING{IEEE_J_JSAC = "{IEEE} J. Sel. Areas Commun."}
@STRING{IEEE_J_COM = "{IEEE} Trans. Commun."} @STRING{IEEE_J_COM = "{IEEE} Trans. Commun."}
@STRING{IEEE_J_COMT = "{IEEE} Trans. Commun. Technol."} @STRING{IEEE_J_COMT = "{IEEE} Trans. Commun. Technol."}
@STRING{IEEE_J_WCOM = "{IEEE} Trans. Wireless Commun."} @STRING{IEEE_J_WCOM = "{IEEE} Trans. Wireless Commun."}
components, packaging and manufacturing components, packaging and manufacturing
@STRING{IEEE_J_ADVP = "{IEEE} Trans. Adv. Packag."} @STRING{IEEE_J_ADVP = "{IEEE} Trans. Adv. Packag."}
@STRING{IEEE_J_CHMT = "{IEEE} Trans. Compon., Hybrids, Manuf. Technol."} @STRING{IEEE_J_CHMT = "{IEEE} Trans. Compon., Hybrids, Manuf. Technol."}
@STRING{IEEE_J_CPMTA = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {A}"} @STRING{IEEE_J_CPMTA = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {A}"}
@STRING{IEEE_J_CPMTB = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {B}"} @STRING{IEEE_J_CPMTB = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {B}"}
@STRING{IEEE_J_CPMTC = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {C}"} @STRING{IEEE_J_CPMTC = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {C}"}
@STRING{IEEE_J_CAPT = "{IEEE} Trans. Compon. Packag. Technol."} @STRING{IEEE_J_CAPT = "{IEEE} Trans. Compon. Packag. Technol."}
@STRING{IEEE_J_CAPTS = "{IEEE} Trans. Compon. Packag. Technol."} @STRING{IEEE_J_CAPTS = "{IEEE} Trans. Compon. Packag. Technol."}
@STRING{IEEE_J_CPART = "{IEEE} Trans. Compon. Parts"} @STRING{IEEE_J_CPART = "{IEEE} Trans. Compon. Parts"}
@STRING{IEEE_J_EPM = "{IEEE} Trans. Electron. Packag. Manuf."} @STRING{IEEE_J_EPM = "{IEEE} Trans. Electron. Packag. Manuf."}
@STRING{IEEE_J_MFT = "{IEEE} Trans. Manuf. Technol."} @STRING{IEEE_J_MFT = "{IEEE} Trans. Manuf. Technol."}
@STRING{IEEE_J_PHP = "{IEEE} Trans. Parts, Hybrids, Packag."} @STRING{IEEE_J_PHP = "{IEEE} Trans. Parts, Hybrids, Packag."}
@STRING{IEEE_J_PMP = "{IEEE} Trans. Parts, Mater., Packag."} @STRING{IEEE_J_PMP = "{IEEE} Trans. Parts, Mater., Packag."}
CAD CAD
@STRING{IEEE_J_TCAD = "{IEEE} J. Technol. Comput. Aided Design"} @STRING{IEEE_J_TCAD = "{IEEE} J. Technol. Comput. Aided Design"}
@STRING{IEEE_J_CAD = "{IEEE} Trans. Comput.-Aided Design Integr. Circuits Syst."} @STRING{IEEE_J_CAD = "{IEEE} Trans. Comput.-Aided Design Integr. Circuits Syst."}
coding, data, information, knowledge coding, data, information, knowledge
@STRING{IEEE_J_IT = "{IEEE} Trans. Inf. Theory"} @STRING{IEEE_J_IT = "{IEEE} Trans. Inf. Theory"}
@STRING{IEEE_J_KDE = "{IEEE} Trans. Knowl. Data Eng."} @STRING{IEEE_J_KDE = "{IEEE} Trans. Knowl. Data Eng."}
computers, computation, networking and software computers, computation, networking and software
@STRING{IEEE_J_C = "{IEEE} Trans. Comput."} @STRING{IEEE_J_C = "{IEEE} Trans. Comput."}
@STRING{IEEE_J_CAL = "{IEEE} Comput. Archit. Lett."} @STRING{IEEE_J_CAL = "{IEEE} Comput. Archit. Lett."}
disabled till definition is verified disabled till definition is verified
STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."} STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."}
@STRING{IEEE_J_ECOMP = "{IEEE} Trans. Electron. Comput."} @STRING{IEEE_J_ECOMP = "{IEEE} Trans. Electron. Comput."}
@STRING{IEEE_J_EVC = "{IEEE} Trans. Evol. Comput."} @STRING{IEEE_J_EVC = "{IEEE} Trans. Evol. Comput."}
@STRING{IEEE_J_FUZZ = "{IEEE} Trans. Fuzzy Syst."} @STRING{IEEE_J_FUZZ = "{IEEE} Trans. Fuzzy Syst."}
@STRING{IEEE_J_IFS = "{IEEE} Trans. Inf. Forensics Security"} @STRING{IEEE_J_IFS = "{IEEE} Trans. Inf. Forensics Security"}
@STRING{IEEE_J_MC = "{IEEE} Trans. Mobile Comput."} @STRING{IEEE_J_MC = "{IEEE} Trans. Mobile Comput."}
@STRING{IEEE_J_NET = "{IEEE/ACM} Trans. Netw."} @STRING{IEEE_J_NET = "{IEEE/ACM} Trans. Netw."}
@STRING{IEEE_J_NN = "{IEEE} Trans. Neural Netw."} @STRING{IEEE_J_NN = "{IEEE} Trans. Neural Netw."}
@STRING{IEEE_J_PDS = "{IEEE} Trans. Parallel Distrib. Syst."} @STRING{IEEE_J_PDS = "{IEEE} Trans. Parallel Distrib. Syst."}
@STRING{IEEE_J_SE = "{IEEE} Trans. Softw. Eng."} @STRING{IEEE_J_SE = "{IEEE} Trans. Softw. Eng."}
computer graphics, imaging, and multimedia computer graphics, imaging, and multimedia
@STRING{IEEE_J_JDT = "{IEEE/OSA} J. Display Technol."} @STRING{IEEE_J_JDT = "{IEEE/OSA} J. Display Technol."}
@STRING{IEEE_J_IP = "{IEEE} Trans. Image Process."} @STRING{IEEE_J_IP = "{IEEE} Trans. Image Process."}
@STRING{IEEE_J_MM = "{IEEE} Trans. Multimedia"} @STRING{IEEE_J_MM = "{IEEE} Trans. Multimedia"}
@STRING{IEEE_J_VCG = "{IEEE} Trans. Vis. Comput. Graphics"} @STRING{IEEE_J_VCG = "{IEEE} Trans. Vis. Comput. Graphics"}
cybernetics, ergonomics, robots, man-machine, and automation cybernetics, ergonomics, robots, man-machine, and automation
@STRING{IEEE_J_ASE = "{IEEE} Trans. Autom. Sci. Eng."} @STRING{IEEE_J_ASE = "{IEEE} Trans. Autom. Sci. Eng."}
@STRING{IEEE_J_JRA = "{IEEE} J. Robot. Autom."} @STRING{IEEE_J_JRA = "{IEEE} J. Robot. Autom."}
@STRING{IEEE_J_HFE = "{IEEE} Trans. Hum. Factors Electron."} @STRING{IEEE_J_HFE = "{IEEE} Trans. Hum. Factors Electron."}
@STRING{IEEE_J_MMS = "{IEEE} Trans. Man-Mach. Syst."} @STRING{IEEE_J_MMS = "{IEEE} Trans. Man-Mach. Syst."}
@STRING{IEEE_J_PAMI = "{IEEE} Trans. Pattern Anal. Mach. Intell."} @STRING{IEEE_J_PAMI = "{IEEE} Trans. Pattern Anal. Mach. Intell."}
in 1989 JRA became RA in 1989 JRA became RA
in August 2004, RA split into ASE and RO in August 2004, RA split into ASE and RO
@STRING{IEEE_J_RA = "{IEEE} Trans. Robot. Autom."} @STRING{IEEE_J_RA = "{IEEE} Trans. Robot. Autom."}
@STRING{IEEE_J_RO = "{IEEE} Trans. Robot."} @STRING{IEEE_J_RO = "{IEEE} Trans. Robot."}
@STRING{IEEE_J_SMC = "{IEEE} Trans. Syst., Man, Cybern."} @STRING{IEEE_J_SMC = "{IEEE} Trans. Syst., Man, Cybern."}
@STRING{IEEE_J_SMCA = "{IEEE} Trans. Syst., Man, Cybern. {A}"} @STRING{IEEE_J_SMCA = "{IEEE} Trans. Syst., Man, Cybern. {A}"}
@STRING{IEEE_J_SMCB = "{IEEE} Trans. Syst., Man, Cybern. {B}"} @STRING{IEEE_J_SMCB = "{IEEE} Trans. Syst., Man, Cybern. {B}"}
@STRING{IEEE_J_SMCC = "{IEEE} Trans. Syst., Man, Cybern. {C}"} @STRING{IEEE_J_SMCC = "{IEEE} Trans. Syst., Man, Cybern. {C}"}
@STRING{IEEE_J_SSC = "{IEEE} Trans. Syst. Sci. Cybern."} @STRING{IEEE_J_SSC = "{IEEE} Trans. Syst. Sci. Cybern."}
earth, wind, fire and water earth, wind, fire and water
@STRING{IEEE_J_GE = "{IEEE} Trans. Geosci. Electron."} @STRING{IEEE_J_GE = "{IEEE} Trans. Geosci. Electron."}
@STRING{IEEE_J_GRS = "{IEEE} Trans. Geosci. Remote Sens."} @STRING{IEEE_J_GRS = "{IEEE} Trans. Geosci. Remote Sens."}
@STRING{IEEE_J_GRSL = "{IEEE} Geosci. Remote Sens. Lett."} @STRING{IEEE_J_GRSL = "{IEEE} Geosci. Remote Sens. Lett."}
@STRING{IEEE_J_OE = "{IEEE} J. Ocean. Eng."} @STRING{IEEE_J_OE = "{IEEE} J. Ocean. Eng."}
education, engineering, history, IEEE, professional education, engineering, history, IEEE, professional
disabled till definition is verified disabled till definition is verified
STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."} STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."}
@STRING{IEEE_J_PROC = "Proc. {IEEE}"} @STRING{IEEE_J_PROC = "Proc. {IEEE}"}
@STRING{IEEE_J_EDU = "{IEEE} Trans. Educ."} @STRING{IEEE_J_EDU = "{IEEE} Trans. Educ."}
@STRING{IEEE_J_EM = "{IEEE} Trans. Eng. Manag."} @STRING{IEEE_J_EM = "{IEEE} Trans. Eng. Manag."}
disabled till definition is verified disabled till definition is verified
STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"} STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"}
@STRING{IEEE_J_PC = "{IEEE} Trans. Prof. Commun."} @STRING{IEEE_J_PC = "{IEEE} Trans. Prof. Commun."}
electromagnetics, antennas, EMI, magnetics and microwave electromagnetics, antennas, EMI, magnetics and microwave
@STRING{IEEE_J_AWPL = "{IEEE} Antennas Wireless Propag. Lett."} @STRING{IEEE_J_AWPL = "{IEEE} Antennas Wireless Propag. Lett."}
@STRING{IEEE_J_MGWL = "{IEEE} Microw. Guided Wave Lett."} @STRING{IEEE_J_MGWL = "{IEEE} Microw. Guided Wave Lett."}
IEEE seems to want "Compon." here, not "Comp." IEEE seems to want "Compon." here, not "Comp."
@STRING{IEEE_J_MWCL = "{IEEE} Microw. Wireless Compon. Lett."} @STRING{IEEE_J_MWCL = "{IEEE} Microw. Wireless Compon. Lett."}
@STRING{IEEE_J_AP = "{IEEE} Trans. Antennas Propag."} @STRING{IEEE_J_AP = "{IEEE} Trans. Antennas Propag."}
@STRING{IEEE_J_EMC = "{IEEE} Trans. Electromagn. Compat."} @STRING{IEEE_J_EMC = "{IEEE} Trans. Electromagn. Compat."}
@STRING{IEEE_J_MAG = "{IEEE} Trans. Magn."} @STRING{IEEE_J_MAG = "{IEEE} Trans. Magn."}
@STRING{IEEE_J_MTT = "{IEEE} Trans. Microw. Theory Tech."} @STRING{IEEE_J_MTT = "{IEEE} Trans. Microw. Theory Tech."}
@STRING{IEEE_J_RFI = "{IEEE} Trans. Radio Freq. Interference"} @STRING{IEEE_J_RFI = "{IEEE} Trans. Radio Freq. Interference"}
@STRING{IEEE_J_TJMJ = "{IEEE} Transl. J. Magn. Jpn."} @STRING{IEEE_J_TJMJ = "{IEEE} Transl. J. Magn. Jpn."}
energy and power energy and power
@STRING{IEEE_J_EC = "{IEEE} Trans. Energy Convers."} @STRING{IEEE_J_EC = "{IEEE} Trans. Energy Convers."}
@STRING{IEEE_J_PEL = "{IEEE} Power Electron. Lett."} @STRING{IEEE_J_PEL = "{IEEE} Power Electron. Lett."}
@STRING{IEEE_J_PWRAS = "{IEEE} Trans. Power App. Syst."} @STRING{IEEE_J_PWRAS = "{IEEE} Trans. Power App. Syst."}
@STRING{IEEE_J_PWRD = "{IEEE} Trans. Power Del."} @STRING{IEEE_J_PWRD = "{IEEE} Trans. Power Del."}
@STRING{IEEE_J_PWRE = "{IEEE} Trans. Power Electron."} @STRING{IEEE_J_PWRE = "{IEEE} Trans. Power Electron."}
@STRING{IEEE_J_PWRS = "{IEEE} Trans. Power Syst."} @STRING{IEEE_J_PWRS = "{IEEE} Trans. Power Syst."}
industrial, commercial and consumer industrial, commercial and consumer
@STRING{IEEE_J_APPIND = "{IEEE} Trans. Appl. Ind."} @STRING{IEEE_J_APPIND = "{IEEE} Trans. Appl. Ind."}
@STRING{IEEE_J_BC = "{IEEE} Trans. Broadcast."} @STRING{IEEE_J_BC = "{IEEE} Trans. Broadcast."}
disabled till definition is verified disabled till definition is verified
STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"} STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"}
@STRING{IEEE_J_CE = "{IEEE} Trans. Consum. Electron."} @STRING{IEEE_J_CE = "{IEEE} Trans. Consum. Electron."}
@STRING{IEEE_J_IE = "{IEEE} Trans. Ind. Electron."} @STRING{IEEE_J_IE = "{IEEE} Trans. Ind. Electron."}
@STRING{IEEE_J_IECI = "{IEEE} Trans. Ind. Electron. Contr. Instrum."} @STRING{IEEE_J_IECI = "{IEEE} Trans. Ind. Electron. Contr. Instrum."}
@STRING{IEEE_J_IA = "{IEEE} Trans. Ind. Appl."} @STRING{IEEE_J_IA = "{IEEE} Trans. Ind. Appl."}
@STRING{IEEE_J_IGA = "{IEEE} Trans. Ind. Gen. Appl."} @STRING{IEEE_J_IGA = "{IEEE} Trans. Ind. Gen. Appl."}
@STRING{IEEE_J_IINF = "{IEEE} Trans. Ind. Informat."} @STRING{IEEE_J_IINF = "{IEEE} Trans. Ind. Informat."}
@STRING{IEEE_J_PSE = "{IEEE} J. Product Safety Eng."} @STRING{IEEE_J_PSE = "{IEEE} J. Product Safety Eng."}
instrumentation and measurement instrumentation and measurement
@STRING{IEEE_J_IM = "{IEEE} Trans. Instrum. Meas."} @STRING{IEEE_J_IM = "{IEEE} Trans. Instrum. Meas."}
insulation and materials insulation and materials
@STRING{IEEE_J_JEM = "{IEEE/TMS} J. Electron. Mater."} @STRING{IEEE_J_JEM = "{IEEE/TMS} J. Electron. Mater."}
@STRING{IEEE_J_DEI = "{IEEE} Trans. Dielectr. Electr. Insul."} @STRING{IEEE_J_DEI = "{IEEE} Trans. Dielectr. Electr. Insul."}
@STRING{IEEE_J_EI = "{IEEE} Trans. Electr. Insul."} @STRING{IEEE_J_EI = "{IEEE} Trans. Electr. Insul."}
mechanical mechanical
@STRING{IEEE_J_MECH = "{IEEE/ASME} Trans. Mechatronics"} @STRING{IEEE_J_MECH = "{IEEE/ASME} Trans. Mechatronics"}
@STRING{IEEE_J_MEMS = "J. Microelectromech. Syst."} @STRING{IEEE_J_MEMS = "J. Microelectromech. Syst."}
medical and biological medical and biological
@STRING{IEEE_J_BME = "{IEEE} Trans. Biomed. Eng."} @STRING{IEEE_J_BME = "{IEEE} Trans. Biomed. Eng."}
Note: The B-ME journal later dropped the hyphen and became the BME. Note: The B-ME journal later dropped the hyphen and became the BME.
@STRING{IEEE_J_B-ME = "{IEEE} Trans. Bio-Med. Eng."} @STRING{IEEE_J_B-ME = "{IEEE} Trans. Bio-Med. Eng."}
@STRING{IEEE_J_BMELC = "{IEEE} Trans. Bio-Med. Electron."} @STRING{IEEE_J_BMELC = "{IEEE} Trans. Bio-Med. Electron."}
disabled till definition is verified disabled till definition is verified
STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"} STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"}
@STRING{IEEE_J_ITBM = "{IEEE} Trans. Inf. Technol. Biomed."} @STRING{IEEE_J_ITBM = "{IEEE} Trans. Inf. Technol. Biomed."}
@STRING{IEEE_J_ME = "{IEEE} Trans. Med. Electron."} @STRING{IEEE_J_ME = "{IEEE} Trans. Med. Electron."}
@STRING{IEEE_J_MI = "{IEEE} Trans. Med. Imag."} @STRING{IEEE_J_MI = "{IEEE} Trans. Med. Imag."}
@STRING{IEEE_J_NB = "{IEEE} Trans. Nanobiosci."} @STRING{IEEE_J_NB = "{IEEE} Trans. Nanobiosci."}
@STRING{IEEE_J_NSRE = "{IEEE} Trans. Neural Syst. Rehabil. Eng."} @STRING{IEEE_J_NSRE = "{IEEE} Trans. Neural Syst. Rehabil. Eng."}
@STRING{IEEE_J_RE = "{IEEE} Trans. Rehabil. Eng."} @STRING{IEEE_J_RE = "{IEEE} Trans. Rehabil. Eng."}
optics, lightwave and photonics optics, lightwave and photonics
@STRING{IEEE_J_PTL = "{IEEE} Photon. Technol. Lett."} @STRING{IEEE_J_PTL = "{IEEE} Photon. Technol. Lett."}
@STRING{IEEE_J_JLT = "J. Lightw. Technol."} @STRING{IEEE_J_JLT = "J. Lightw. Technol."}
physics, electrons, nanotechnology, nuclear and quantum electronics physics, electrons, nanotechnology, nuclear and quantum electronics
@STRING{IEEE_J_EDL = "{IEEE} Electron Device Lett."} @STRING{IEEE_J_EDL = "{IEEE} Electron Device Lett."}
@STRING{IEEE_J_JQE = "{IEEE} J. Quantum Electron."} @STRING{IEEE_J_JQE = "{IEEE} J. Quantum Electron."}
@STRING{IEEE_J_JSTQE = "{IEEE} J. Sel. Topics Quantum Electron."} @STRING{IEEE_J_JSTQE = "{IEEE} J. Sel. Topics Quantum Electron."}
@STRING{IEEE_J_ED = "{IEEE} Trans. Electron Devices"} @STRING{IEEE_J_ED = "{IEEE} Trans. Electron Devices"}
@STRING{IEEE_J_NANO = "{IEEE} Trans. Nanotechnol."} @STRING{IEEE_J_NANO = "{IEEE} Trans. Nanotechnol."}
@STRING{IEEE_J_NS = "{IEEE} Trans. Nucl. Sci."} @STRING{IEEE_J_NS = "{IEEE} Trans. Nucl. Sci."}
@STRING{IEEE_J_PS = "{IEEE} Trans. Plasma Sci."} @STRING{IEEE_J_PS = "{IEEE} Trans. Plasma Sci."}
reliability reliability
IEEE seems to want "Mat." here, not "Mater." IEEE seems to want "Mat." here, not "Mater."
@STRING{IEEE_J_DMR = "{IEEE} Trans. Device Mater. Rel."} @STRING{IEEE_J_DMR = "{IEEE} Trans. Device Mater. Rel."}
@STRING{IEEE_J_R = "{IEEE} Trans. Rel."} @STRING{IEEE_J_R = "{IEEE} Trans. Rel."}
semiconductors, superconductors, electrochemical and solid state semiconductors, superconductors, electrochemical and solid state
@STRING{IEEE_J_ESSL = "{IEEE/ECS} Electrochem. Solid-State Lett."} @STRING{IEEE_J_ESSL = "{IEEE/ECS} Electrochem. Solid-State Lett."}
@STRING{IEEE_J_JSSC = "{IEEE} J. Solid-State Circuits"} @STRING{IEEE_J_JSSC = "{IEEE} J. Solid-State Circuits"}
@STRING{IEEE_J_ASC = "{IEEE} Trans. Appl. Supercond."} @STRING{IEEE_J_ASC = "{IEEE} Trans. Appl. Supercond."}
@STRING{IEEE_J_SM = "{IEEE} Trans. Semicond. Manuf."} @STRING{IEEE_J_SM = "{IEEE} Trans. Semicond. Manuf."}
sensors sensors
@STRING{IEEE_J_SENSOR = "{IEEE} Sensors J."} @STRING{IEEE_J_SENSOR = "{IEEE} Sensors J."}
VLSI VLSI
@STRING{IEEE_J_VLSI = "{IEEE} Trans. {VLSI} Syst."} @STRING{IEEE_J_VLSI = "{IEEE} Trans. {VLSI} Syst."}
IEEE Magazines IEEE Magazines
@STRING{IEEE_M_AES = "{IEEE} Aerosp. Electron. Syst. Mag."} @STRING{IEEE_M_AES = "{IEEE} Aerosp. Electron. Syst. Mag."}
@STRING{IEEE_M_HIST = "{IEEE} Ann. Hist. Comput."} @STRING{IEEE_M_HIST = "{IEEE} Ann. Hist. Comput."}
@STRING{IEEE_M_AP = "{IEEE} Antennas Propag. Mag."} @STRING{IEEE_M_AP = "{IEEE} Antennas Propag. Mag."}
@STRING{IEEE_M_ASSP = "{IEEE} {ASSP} Mag."} @STRING{IEEE_M_ASSP = "{IEEE} {ASSP} Mag."}
@STRING{IEEE_M_CD = "{IEEE} Circuits Devices Mag."} @STRING{IEEE_M_CD = "{IEEE} Circuits Devices Mag."}
@STRING{IEEE_M_CAS = "{IEEE} Circuits Syst. Mag."} @STRING{IEEE_M_CAS = "{IEEE} Circuits Syst. Mag."}
@STRING{IEEE_M_COM = "{IEEE} Commun. Mag."} @STRING{IEEE_M_COM = "{IEEE} Commun. Mag."}
@STRING{IEEE_M_COMSOC = "{IEEE} Commun. Soc. Mag."} @STRING{IEEE_M_COMSOC = "{IEEE} Commun. Soc. Mag."}
@STRING{IEEE_M_CIM = "{IEEE} Comput. Intell. Mag."} @STRING{IEEE_M_CIM = "{IEEE} Comput. Intell. Mag."}
CSEM changed to CSE in 1999 CSEM changed to CSE in 1999
@STRING{IEEE_M_CSE = "{IEEE} Comput. Sci. Eng."} @STRING{IEEE_M_CSE = "{IEEE} Comput. Sci. Eng."}
@STRING{IEEE_M_CSEM = "{IEEE} Comput. Sci. Eng. Mag."} @STRING{IEEE_M_CSEM = "{IEEE} Comput. Sci. Eng. Mag."}
@STRING{IEEE_M_C = "{IEEE} Computer"} @STRING{IEEE_M_C = "{IEEE} Computer"}
@STRING{IEEE_M_CAP = "{IEEE} Comput. Appl. Power"} @STRING{IEEE_M_CAP = "{IEEE} Comput. Appl. Power"}
@STRING{IEEE_M_CGA = "{IEEE} Comput. Graph. Appl."} @STRING{IEEE_M_CGA = "{IEEE} Comput. Graph. Appl."}
@STRING{IEEE_M_CONC = "{IEEE} Concurrency"} @STRING{IEEE_M_CONC = "{IEEE} Concurrency"}
@STRING{IEEE_M_CS = "{IEEE} Control Syst. Mag."} @STRING{IEEE_M_CS = "{IEEE} Control Syst. Mag."}
@STRING{IEEE_M_DTC = "{IEEE} Des. Test. Comput."} @STRING{IEEE_M_DTC = "{IEEE} Des. Test. Comput."}
@STRING{IEEE_M_EI = "{IEEE} Electr. Insul. Mag."} @STRING{IEEE_M_EI = "{IEEE} Electr. Insul. Mag."}
@STRING{IEEE_M_ETR = "{IEEE} ElectroTechnol. Rev."} @STRING{IEEE_M_ETR = "{IEEE} ElectroTechnol. Rev."}
@STRING{IEEE_M_EMB = "{IEEE} Eng. Med. Biol. Mag."} @STRING{IEEE_M_EMB = "{IEEE} Eng. Med. Biol. Mag."}
@STRING{IEEE_M_EMR = "{IEEE} Eng. Manag. Rev."} @STRING{IEEE_M_EMR = "{IEEE} Eng. Manag. Rev."}
@STRING{IEEE_M_EXP = "{IEEE} Expert"} @STRING{IEEE_M_EXP = "{IEEE} Expert"}
@STRING{IEEE_M_IA = "{IEEE} Ind. Appl. Mag."} @STRING{IEEE_M_IA = "{IEEE} Ind. Appl. Mag."}
@STRING{IEEE_M_IM = "{IEEE} Instrum. Meas. Mag."} @STRING{IEEE_M_IM = "{IEEE} Instrum. Meas. Mag."}
@STRING{IEEE_M_IS = "{IEEE} Intell. Syst."} @STRING{IEEE_M_IS = "{IEEE} Intell. Syst."}
@STRING{IEEE_M_IC = "{IEEE} Internet Comput."} @STRING{IEEE_M_IC = "{IEEE} Internet Comput."}
@STRING{IEEE_M_ITP = "{IEEE} {IT} Prof."} @STRING{IEEE_M_ITP = "{IEEE} {IT} Prof."}
@STRING{IEEE_M_MICRO = "{IEEE} Micro"} @STRING{IEEE_M_MICRO = "{IEEE} Micro"}
@STRING{IEEE_M_MW = "{IEEE} Microw. Mag."} @STRING{IEEE_M_MW = "{IEEE} Microw. Mag."}
@STRING{IEEE_M_MM = "{IEEE} Multimedia"} @STRING{IEEE_M_MM = "{IEEE} Multimedia"}
@STRING{IEEE_M_NET = "{IEEE} Netw."} @STRING{IEEE_M_NET = "{IEEE} Netw."}
IEEE's editorial manual lists "Pers. Commun.", IEEE's editorial manual lists "Pers. Commun.",
but "Personal Commun. Mag." seems to be what is used in the journals but "Personal Commun. Mag." seems to be what is used in the journals
@STRING{IEEE_M_PCOM = "{IEEE} Personal Commun. Mag."} @STRING{IEEE_M_PCOM = "{IEEE} Personal Commun. Mag."}
@STRING{IEEE_M_POT = "{IEEE} Potentials"} @STRING{IEEE_M_POT = "{IEEE} Potentials"}
CAP and PER merged to form PE in 2003 CAP and PER merged to form PE in 2003
@STRING{IEEE_M_PE = "{IEEE} Power Energy Mag."} @STRING{IEEE_M_PE = "{IEEE} Power Energy Mag."}
@STRING{IEEE_M_PER = "{IEEE} Power Eng. Rev."} @STRING{IEEE_M_PER = "{IEEE} Power Eng. Rev."}
@STRING{IEEE_M_PVC = "{IEEE} Pervasive Comput."} @STRING{IEEE_M_PVC = "{IEEE} Pervasive Comput."}
@STRING{IEEE_M_RA = "{IEEE} Robot. Autom. Mag."} @STRING{IEEE_M_RA = "{IEEE} Robot. Autom. Mag."}
@STRING{IEEE_M_SAP = "{IEEE} Security Privacy"} @STRING{IEEE_M_SAP = "{IEEE} Security Privacy"}
@STRING{IEEE_M_SP = "{IEEE} Signal Process. Mag."} @STRING{IEEE_M_SP = "{IEEE} Signal Process. Mag."}
@STRING{IEEE_M_S = "{IEEE} Softw."} @STRING{IEEE_M_S = "{IEEE} Softw."}
@STRING{IEEE_M_SPECT = "{IEEE} Spectr."} @STRING{IEEE_M_SPECT = "{IEEE} Spectr."}
@STRING{IEEE_M_TS = "{IEEE} Technol. Soc. Mag."} @STRING{IEEE_M_TS = "{IEEE} Technol. Soc. Mag."}
@STRING{IEEE_M_VT = "{IEEE} Veh. Technol. Mag."} @STRING{IEEE_M_VT = "{IEEE} Veh. Technol. Mag."}
@STRING{IEEE_M_WC = "{IEEE} Wireless Commun. Mag."} @STRING{IEEE_M_WC = "{IEEE} Wireless Commun. Mag."}
@STRING{IEEE_M_TODAY = "Today's Engineer"} @STRING{IEEE_M_TODAY = "Today's Engineer"}
IEEE Online Publications IEEE Online Publications
@STRING{IEEE_O_CSTO = "{IEEE} Commun. Surveys Tuts."} @STRING{IEEE_O_CSTO = "{IEEE} Commun. Surveys Tuts."}
disabled till definition is verified disabled till definition is verified
STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"} STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"}
-- --
EOF EOF

File diff suppressed because it is too large Load Diff

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 347 KiB

After

Width:  |  Height:  |  Size: 347 KiB