Designing fuzzy inference system and subsystems

16 views (last 30 days)
Hello.I have several fuzzy systems about security, all of which have 3 outputs: weak, medium and strong. In the comprehensive system, I want to enter all these fuzzy systems and in addition ask it to calculate if it sees 10 weak cases, the final output will be the vulnerable level. Is this possible? Can you guide me?
  4 Comments
Tehreem
Tehreem on 2 May 2025

Fuzzy inference rule apply method and fuzzyfication and defuzification in Matlab method

Sam Chak
Sam Chak on 2 May 2025
I understand that Tsukamoto fuzzy inference is not supported by the Fuzzy Logic Toolbox. While this may evoke a sense of despair, it also means that you have greater flexibility to create any monotonic function you desire.
For example, I have plotted two custom Softplus membership functions below. They behave monotonically by definition.
x = linspace(-3, 3, 5001)';
%% specify Softplus MFs
d = 1.5; % drop point
c = 0; % center point
b = 5; % build-up rate
mf1 = spmf(x, [-b, c, -d]);
mf2 = spmf(x, [ b, c, d]);
%% plot monotonic MFs
plot(x, [mf1, mf2]), grid on
xlabel('x'), ylabel('Degree of membership')
title('Softplus membership functions')
text(-2.4, 1.1, 'mf1')
text( 2.1, 1.1, 'mf2')
xline(-d, '--', 'color', '#7F7F7F')
xline( d, '--', 'color', '#7F7F7F')
ylim([-0.2, 1.2])
%% Chak's Softplus membership function
function out = spmf(x, params)
d = params(3); % drop point (truncation)
c = params(2); % center point
b = params(1); % build-up rate
a = abs(1/b); % amplitude (fixed, depends on b)
sp = a*log(1 + exp(b*((x - 2*c)/(d - 2*c)*sign(b))));
out = min(sp, 1);
end
More importantly, you must be familiar with the Tsukamoto fuzzy inference formula. How does it differ from the weighted average formula used in Sugeno fuzzy inference?
Many Tsukamoto Fuzzians, particularly in the Multi-Criteria Decision-Making (MCDM) field, still use the effective yet simple VLOOKUP function in Microsoft Excel to search for the two nearest adjacent x values from two known monotonic membership values ( and ), and then perform linear interpolation to estimate the weighted average x value.

Sign in to comment.

Answers (2)

praguna manvi
praguna manvi on 9 Aug 2024
Edited: praguna manvi on 9 Aug 2024
To connect a network of fuzzy systems, you can use the “fistree” function. This allows you to build a network of fuzzy inference systems. In this case, the outputs of these three fuzzy systems can be passed to a final fuzzy system, where you can define its membership functions and rule set to evaluate the above condition.
Here is the link to the documentation on an example of connecting three fuzzy systems:
  2 Comments
Sam Chak
Sam Chak on 9 Aug 2024
Could you please provide more information about the inputs to the Fuzzy Analyzer/Predictor for determining the security level? Are the terms "weak," "medium," and "strong" referring to the output membership functions? Providing additional details would allow @praguna manvi to guide you on how to properly design the fuzzy decision tree.

Sign in to comment.


Sam Chak
Sam Chak on 10 Aug 2024
Edited: Sam Chak on 1 May 2025
For Multiple-Criteria Decision-Making (MCDM) using fuzzy logic, you should use plateau distribution type fuzzy sets that correspond to the defined linguistic variables of "Weak", "Medium", and "Strong" for the inputs to the fuzzy system. In the following example, I use two inputs: "System Technology" and "Trained Personnel."
By applying plateau-type membership functions and nine fuzzy rules, the decision-making surface will have a quarter Ziggurat-like structure. The flat plains allow you to immediately identify the security level as {"Minimum level (0)", "Low level (2.5)", "Medium level (5.0)", "High level (7.5)", "Maximum level (10)"} based on the score obtained. Any score between these levels will help you determine where the system should be upgraded to achieve the desired security level.
fis = mamfis('Name', "Haniye_Security");
%% Fuzzy Input 1: System Technology
fis = addInput(fis, [0 10], 'Name', 'System_Technology');
fis = addMF(fis, 'System_Technology', 'linzmf', [2 4 ], 'Name', 'Weak');
fis = addMF(fis, 'System_Technology', 'trapmf', [2 4 6 8], 'Name', 'Medium');
fis = addMF(fis, 'System_Technology', 'linsmf', [ 6 8], 'Name', 'Strong');
%% Fuzzy Input 2: Trained Personnel
fis = addInput(fis, [0 10], 'Name', 'Trained_Personnel');
fis = addMF(fis, 'Trained_Personnel', 'linzmf', [2 4 ], 'Name', 'Weak');
fis = addMF(fis, 'Trained_Personnel', 'trapmf', [2 4 6 8], 'Name', 'Medium');
fis = addMF(fis, 'Trained_Personnel', 'linsmf', [ 6 8], 'Name', 'Strong');
%% Fuzzy Output: Security Level
fis = addOutput(fis, [0 10], 'Name', 'Security_Level');
fis = addMF(fis, 'Security_Level', 'trimf', 0.0*[1 1 1], 'Name', 'Min');
fis = addMF(fis, 'Security_Level', 'trimf', 2.5*[1 1 1], 'Name', 'Low');
fis = addMF(fis, 'Security_Level', 'trimf', 5.0*[1 1 1], 'Name', 'Med');
fis = addMF(fis, 'Security_Level', 'trimf', 7.5*[1 1 1], 'Name', 'High');
fis = addMF(fis, 'Security_Level', 'trimf', 10.*[1 1 1], 'Name', 'Max');
%% Plot fuzzy sets
figure(1)
t = tiledlayout(2, 2, 'TileSpacing', 'Compact');
nexttile
plotmf(fis, 'input', 1, 1001), grid on, title('System Technology'), ylim([-0.2, 1.2])
nexttile
plotmf(fis, 'input', 2, 1001), grid on, title('Trained Personnel'), ylim([-0.2, 1.2])
nexttile([1 2]);
plotmf(fis, 'output', 1, 1001), grid on, title('Output Fuzzy sets for Security Level'), ylim([-0.2, 1.2])
%% Fuzzy Rules
rules = [
"System_Technology==Weak & Trained_Personnel==Weak => Security_Level=Min"
"System_Technology==Weak & Trained_Personnel==Medium => Security_Level=Low"
"System_Technology==Weak & Trained_Personnel==Strong => Security_Level=Med"
"System_Technology==Medium & Trained_Personnel==Weak => Security_Level=Low"
"System_Technology==Medium & Trained_Personnel==Medium => Security_Level=Med"
"System_Technology==Medium & Trained_Personnel==Strong => Security_Level=High"
"System_Technology==Strong & Trained_Personnel==Weak => Security_Level=Med"
"System_Technology==Strong & Trained_Personnel==Medium => Security_Level=High"
"System_Technology==Strong & Trained_Personnel==Strong => Security_Level=Max"
];
fis = addRule(fis, rules);
%% Decision-making Surface
figure(2)
opt = gensurfOptions('NumGridPoints', 51);
gensurf(fis, opt), grid on

Categories

Find more on Fuzzy Logic in Simulink in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!